我目前有这个代码:
// takes a table reference as an argument
.macro load_table_into_r0_to_r8
ldi ZL, low(2*@0)
ldi ZH, high(2*@0)
lpm r25, Z+
mov r0, r25
lpm r25, Z+
mov r1, r25
lpm r25, Z+
mov r2, r25
lpm r25, Z+
mov r3, r25
lpm r25, Z+
mov r4, r25
lpm r25, Z+
mov r5, r25
lpm r25, Z+
mov r6, r25
lpm r25, Z+
mov r7, r25
lpm r25, Z+
mov r8, r25
.endm
如您所见,重复了许多非常相似的代码。
如果没有办法以更短的方式编写它,例如 with.irp
或 may .if
s,那将是荒谬的。但是,我无法让它发挥作用。因为.irp
我试过这个:
.irp i, 0,1,2,3,4,5,6,7,8
lpm r25, Z+
mov r\i, r25
.endr
虽然 Atmel Studio 确实突出显示.irp
(它没有突出显示以 a 开头的所有内容.
)但它不起作用:Invalid directive: '.irp'
另请参阅我的另一个相关问题:MOV into a register specified by macro argument。