请教:bootloader自编程中有段程序不明白
void boot_page_ew(long p_address,char code){
asm("mov r30,r16
"
"mov r31,r17
"
"out 0x3b,r18
"); //将页地址放入Z寄存器和RAMPZ的Bit0中
SPMCSR = code; //寄存器SPMCSR中为操作码
asm("spm
"); //对指定Flash页进行操作
}
函数的第一个参数是个长整形,地址放到了四个寄存器中,那么 "out 0x3b,r18
" 是什么意思啊 你已经知道函数的第一个参数是个长整形,地址放到了四个寄存器中,那么是哪几个寄存器中弄明白了吗?
尽管是长整形,占4个字节,实际的页地址只有17位,所以最高的字节就不管它了,可以使代码短,效率也提高了。
r30,r31为Z寄存器,0x3b为寄存器RAMPZ在I/O空间的地址。
页:
[1]