vianvian 发表于 2006-12-22 19:54:30

请教: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
" 是什么意思啊

machao 发表于 2007-3-9 23:11:50

你已经知道函数的第一个参数是个长整形,地址放到了四个寄存器中,那么是哪几个寄存器中弄明白了吗?



尽管是长整形,占4个字节,实际的页地址只有17位,所以最高的字节就不管它了,可以使代码短,效率也提高了。



r30,r31为Z寄存器,0x3b为寄存器RAMPZ在I/O空间的地址。
页: [1]
查看完整版本: 请教:bootloader自编程中有段程序不明白