Необходимо загрузить константу в Z регистр и косвенно вызвать подпрограмму. а – константа.
Сам макрос: #define IcallFunc(a)\ {\ asm ("LDI r30, Low(a)\n LDI r31, High(a)\n ICALL");\ }\
Применение: IcallFunc (0х0104); по идеи вызывается подпрограмма по адресу 0х0104.
Пишет: Error[Og005]: Unknown symbol in inline assembly: "a"
Если объявить переменную а, unsigned int a; тогда IcallFunc (0х0104), нормально компилируется, но!
17: IcallFunc (0x0104); +0000008D: EFE7 LDI R30,0xF7 Load immediate +0000008E: E0F0 LDI R31,0x00 Load immediate +0000008F: 9509 ICALL Indirect call to (Z) В место константы 0х0104, загружает в r30, r31 адрес SRAM где расположена переменная а – 0x00F7 SRAM, значение переменной 0x0000. Как заставить загружать константу 0х0104 а, не адрес SRAM где расположена переменная , мне не понятно.
|