Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава б. Основы программирования МКАVR 1 39 родную лень и осваивает пользование макросами в MS Word или Photoshop, то очень быстро переходит в состояние «а как я без этого раньше жил?». Конечно, возня с макросами обретает смысл только тогда, когда приходится повто­ рять некоторую последовательность действий очень часто. Делать что-то такое на один раз особого смысла не имеет, хотя в самой процедуре создания макроса нет ничего сверхсложного. Здесь мы коснемся только принципов обращения с макро­ сами в АVR-ассемблере, а использовать их в повседневной деятельности или нет - принимайте решение сами. С одной стороны, развитая система макросов позволяет практически создать свой собственный язык программирования, с другой - как и любая индивидуализация, удаляет вас от стандарта, осложняет перенос и распро­ странение программ . Создание несложного макроса мы покажем на примере модификации операции Ис­ ключающее ИЛИ (XOR), которая в АVR имеет ограничения . Сама операция может потребоваться, например, для быстрого инвертирования битов какого-нибудь реги­ стра- всех сразу или выборочно по заданной маске . Выполняется она командой, которая здесь называется eor, а ограничение ее в том, что эта команда действует лишь на пару регистров общего назначения. Следующая команда произведет опе­ рацию XOR содержимого регистра rl 7 с содержимым r l б (и поместит результат, понятно, в rl 7 ) : eor rl 7 , r l 6 На практике, однако, нам обычно требуется в качестве второго операнда не ре­ гистр, а число - заданная маска битов. Поэтому мы создаем следующий макрос под названием eori (листинг 6 . 8) .macro eori push rl б ldi r l б , @ l eor @ O , rl б рор r l б . endm Вызов такого макроса для преобразования регистра rl 7 : eori rl7 ,mas k где mas k - битовая маска в виде числа ( о ней подробно рассказано в разд. «Коман­ ды логических операций» главы 7). Отметим, что текст макроса в тексте программы обязательно должен стоять до его вызова, иначе компилятор его не найдет. Иными словами, макросы надо располагать в начале программы - либо там же, где дирек­ тива . include и определения переменных, либо сразу после таблицы прерываний. Имя мы присвоили по аналогии с другими подобными операциями с непосредст­ венными значениями (immediate), а не с регистрами, - таким же образом авторы

RkJQdWJsaXNoZXIy MTExODQxMg==