Подскажите по использованию препроцессорной директиве #define в AVR Studio в программе на АССЕМБЛЕРЕ при использовании её не для определения константы, а для определения макроса-функции.
В общем виде определение препроцессорного макроса-функции выглядит так: #define prepMacrosName (список аргументов) (определение функции)
Вопрос №1
В хелпе приводиться такой пример: #define SQR(X) ((X)*(X))
Т.е. если я вызову
ldi ZL , low SQR(17)
, то компилятор вместо SQR(17) напишет"
ldi ZL , low ((17) x (17)) или ldi ZL , low (289) ???
Вопрос №2
Обязательно ли в качестве аргументов "функции" макроса числовые переменные? Или можно и куски текстовых строк? Могу ли я например использовать такой макрос: #define Command (InstructionType) (InstructionType)
в строке программы
Command (and)i R16 , 0b01001000 // эквивалетно andi R16, 0b01001000 Command (or)i R16 , 0b01001110 // эквивалетно ori R16, 0b01001110
Замечание: как это сделано в СИ-компиляторах НЕ ИНТЕРЕСУЕТ. Интересует как это сделано для ассемблера в AVR Studio
--------------------
После устранения бага в программе она стала работать....хуже
|