Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 323 В строках 6 — 11 находится блок описания переменных и массивов. Все переменные и массивы имеют свои аналоги в программе на Ассемблере. В строке 6 описывается переменная f lz, которая используется как флаг задержки. В строке 7 описывается массив для оперативного хранения ключевой комбинации. Все значения этого массива будут размещены в ОЗУ (буфер в ОЗУ). Длина массива выбирается равной bsize. В строках 9,10 описываются переменная и массив, которые будут хра ­ ниться в EEPROM. Переменная klen предназначена для хранения длины кодовой комбинации. Массив bu f е предназначен для хранения самой этой комбинации. При описании переменных и массивов, которые будут размещаться в EEPROM, данная версия языка СИ требует обязательной их инициали ­ зации. То есть требует указать значение всех элементов по умолчанию. Указанные таким образом значения в процессе «прошивки» микрокон ­ троллера попадают непосредственно в EEPROM. Если соблюдать ука ­ занные выше требования, то строки 9 и 10 нашей программы должны выглядеть примерно так: eeprom unsigned char klen=0x4; eeprom unsigned int bufe[bsize]={0x76F, 0x77F, 0x7FE, 0x7 7F} ; Если мы воспользуемся данной редакцией команд описания, то мы полу ­ чим программу электронного кодового замка. В ней уже на стадии изготов ­ ления заложена некоторая начальная ключевая кодовая комбинация, кото ­ рую, впрочем, в любой момент владелец замка может изменить на новую. Но мне интересно показать, что можно сделать, если закладывать код заранее нежелательно. Если вы не стали указывать начальные зна ­ чения для переменной и массива, то это не является критической ошиб ­ кой. Программа будет успешно оттранслирована, а результирующий код полностью работоспособен. Единственное неудобство — сообщение о некритичной ошибке. По-английски оно называется «Warning» (пред ­ упреждение). Оно будет возникать каждый раз при трансляции про ­ граммы. Можно, конечно, просто не обращать на него внимание. Однако более правильно будет временно отключить сообщение при помощи директивы #pragma и команды warn, как это и сделано в про ­ грамме на листинге 5.20. В строке 8 вывод предупреждений отключается, а в строке 11 включается снова. Отключать предупреждения навсегда не реко ­ мендуется. Так можно пропустить другие, более важные предупреждения. Далее в программе начинается описание всех составляющих ее функ ­ ций. Данная программа состоит из пяти функций: ♦ две функции обработки прерываний (строки 12,13 и 14,15); ♦ функция ввода кода состояния клавиатуры (строки 16— 26);

RkJQdWJsaXNoZXIy MTExODQxMg==