Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 267 за указанные пределы, то транслятор выдаст сообщение об ошибке. В качестве указателя массива можно использовать не только числовую кон станту. В квадратные скобки вы можете вписать любую переменную или любое выражение. Главное, чтобы значение этого выражения входило в область допустимых значений. Это полезно запомнить. При описании массива можно одновременно производить его инициа лизацию. Под инициализацией понимается присвоение начальных значений всем элементам массива. Строка описания массива, производящая его инициализацию, выгля дит примерно следующим образом: int rabtab[5] = {23, 41, 52, 287, 40, 51}; char txtl[] = "Simferopol"; Начальные значения всех элементов записываются после знака «=» в фигурных скобках через запятую (числовые значения) либо в кавычках в виде символьной строки. В последнем случае в каждый элемент массива записывается код одного из символов. Если при описании массива используется инициализация, допускается не указывать его размер. В этом случае размер определяется автоматически по количеству значений в фигурных скобках или по количеству символов. Еще один аспект программирования на языке СИ, который мы будем впервые использовать в нашей программе, — это директивы локализа ции переменных и массивов. Так как наша версия СИ специально пред назначена для составления программ для микроконтроллеров, она про сто обязана иметь возможность явно указывать вид памяти, где нужно хранить ту либо иную переменную или массив. По умолчанию транслятор сам решает эту задачу и размещает пере менные и массивы по своему усмотрению. Но иногда вопрос размеще ния имеет принципиальное значение. В этом случае применяются специ альные директивы. Эти директивы используются в процессе описания и указывают транслятору, в каком из видов памяти разместить данную конкретную переменную либо массив. Например, если вы желаете, чтобы значение вашей переменной хранилось в одном из регистров общего назначения, то при описании этой переменной вы должны использовать директиву register. Вот несколько примеров таких описаний: register int alpha; // Определение регистровой // переменной alpha register unsigned int beta // Определение регистровой // переменной beta
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==