Белов, А.В. Микроконтроллеры 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

RkJQdWJsaXNoZXIy MTExODQxMg==