首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更优雅地完成此AVR程序集?

如何更优雅地完成此AVR程序集?
EN

Stack Overflow用户
提问于 2014-03-15 05:07:51
回答 1查看 384关注 0票数 0

我现在得到了这个代码:

代码语言:javascript
运行
复制
// 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

正如您所看到的,很多非常相似的代码都是重复的。

如果不能用一种更短的方式来写这段代码,比如用.irp或者.ifs,那就太荒谬了。但是,我不能让它工作。对于.irp,我尝试了这个:

代码语言:javascript
运行
复制
.irp i, 0,1,2,3,4,5,6,7,8
   lpm r25, Z+
   mov r\i, r25
.endr

虽然Atmel Studio确实突出显示了.irp (它不会突出显示以.开头的所有内容),但它不起作用:Invalid directive: '.irp'

另请参阅我的另一个相关问题:MOV into a register specified by macro argument

EN

回答 1

Stack Overflow用户

发布于 2014-03-15 06:11:59

我知道这不能直接回答你的问题,但是你知道AVR寄存器是内存映射到地址0的事实吗?因此,您可以使用运行时内存复制循环,而不是此宏结构。在我不知道的情况下,您当然可能有其他一些限制来排除此选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22415766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档