看马潮老师的BOOT程序时,有些地方不懂, 希望朋友们赐教。
void boot_page_ew(long p_address,char code)
{
asm("mov r30,r16\n"
"mov r31,r17\n"
"out 0x3b,r18\n"); //将页地址放入Z寄存器和RAMPZ的Bit0中
SPMCSR = code; //寄存器SPMCSR中为操作码
asm("spm\n"); //对指定Flash页进行操作
}
这个long变量p_address 是用了R16/R17/R18这三个地址呢?"out 0x3b,r18\n"); 这句 0x3b是什么?为什么用0x3b, 以前没接触过汇编, 所以很多看不懂?
AVR 汇编中实参地址
答案:2 悬赏:70 手机版
解决时间 2021-03-08 23:47
- 提问者网友:十年饮冰
- 2021-03-08 18:36
最佳答案
- 五星知识达人网友:狂恋
- 2021-03-08 18:55
一个Flash页的擦除、写入,以及填充Flash缓冲页的函数采用内嵌AVR汇编完成,在ICCAVR中,寄存器R16、R17、R18、R19用于传递一个C函数的第1、2个参数(int类型)或第1个乘数(long类型),具体参考ICCAVR应用说明。
ox3b 是RAMPZ的地址。。
ox3b 是RAMPZ的地址。。
全部回答
- 1楼网友:愁杀梦里人
- 2021-03-08 19:12
可以私聊我~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯