Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
120 Часть 11. Программирование микроконтроллеров АVR на ассемблере ты, индивидуальные для каждого экземпляра устройства (например, калибровоч ные коэффициенты датчиков) следует хранить в EEPROM, откуда их легко про честь и при необходимости изменить отдельной процедурой калибровки, не затра гивая саму программу. Такое соответствие каждой разновидности памяти ее назна чению позволяет оптимальным образом использовать ресурсы контроллера и выжать из него намного больше, чем позволяет любой язык высокого уровня. Как вы уже знаете, при работе МК последовательно выполняет команды програм мы, записанной в памяти программ. Программист может менять порядок выполне ния команд, организуя циклы и различные переходы. Одно из самых мощных средств программирования - вызов подпрограмм или процедур (в нашем случае это одно и то же), т. е. кусков кода, которые могут использоваться неоднократно. Во всех ассемблерах вызов процедур предусмотрен обязательно. ЗАМЕТКИ НА ПОЛЯХ В Pascal и других классических алголоподобных языках подпрограммы делятся на процедуры и функции , а в языке С и всех остальных, основанных на его синтаксисе, есть только функции . В ассемблере , строго говоря , существуют только подпрограммы, хотя в основе это все одно и то же - пример еще одной путаницы в головах програм мистов , в которую вникать совсем не хочется . Потому пусть читатель меня извинит, если я иногда буду вперемешку употреблять термины «процедура» и «подпрограм ма» , подразумевая , что это означает одинаковые сущности . А вот «функций» , как та ковых, собственно в ассемблере не бывает вовсе. Функция - это всего лишь такой особый способ передачи параметров из подпрограммы, характерный именно для язы ков высокого уровня . Для ассемблера функция ничем не отличается от любой другой подпрограммы. - Кроме выполнения просто процедур-подпрограмм, важное значение имеет обра ботка прерываний. По сути, это такая же процедура, но ее выполнение отличается некоторыми существенными аппаратными нюансами, потому необходимые коман д ь 1 для обработки прерываний другие . Давайте разберемся во всем этом подробнее. Общая структура ассемблерной про граммы и ее выполнение Естественно, программу сначала нужно записать в память МК, причем так, чтобы МК «знал», откуда начинать при включении питания или после подачи импульса на вывод RESET . Это его «Знание» в случае современных МК АVR также програм мируется, однако пока для простоты будем считать, что программа всегда начинает выполняться с самой первой ячейки памяти программ - т. е . с нулевого адреса. Исходя из этих обстоятельств, программа должна иметь определенную структуру. По этому начальному (нулевому) адресу почти всегда располагается одна и та же команда безусловного перехода, название которой во всех ассемблерах происходит от английского jump (прыжок) . Для AVR она может записываться следующим образом : rjrnp RESET или jrnp RESET
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==