cnxh 发表于 2018-6-3 20:11:24

AVRIAR内嵌汇编定义标号

AVRIAR内嵌汇编跳转指令 asm("jmp 0XFFFA") 跳转的地址怎么才能使用xcl定义的变量
如xcl文件定义-D_..X_FLASH_BOOT_APP_SAVE_JMP=0XFFFA或-Z(DATA)FLASH_BOOT_APP_SAVE_JMP=0XFFFA
使用asm("jmp FLASH_BOOT_APP_SAVE_JMP") 总是提示错误,怎么才不会报错

cnxh 发表于 2018-6-3 20:39:36

谢谢自己用函数指针解决,发出来大家遇到问题可以参考下
xcl文件定义跳转地址-Z(DATA)FLASH_BOOT_APP_SAVE_JMP=0x7F80
__rootuint16 __flashI_Ram_JAmp@"FLASH_BOOT_APP_SAVE_JMP";
程序中
         void    (*pIapFun)(void);       //定义一个函数指针.用于指向APP程序入口
             uint16 __flash    *IapJumpAddr = &I_Ram_JAmp;            //IAP程序的跳转地址.即,IAP程序的入口.
    pIapFun = (void (*)(void))IapJumpAddr;            //生成跳转函数.
    (*pIapFun) ();                                  //跳转到0x7F80地址.不再返回

cnxh 发表于 2018-6-3 20:56:44

本帖最后由 cnxh 于 2018-6-3 21:47 编辑

有个问题就是用嵌入汇编的话,指令只有1条,
而用函数指针是3条指令,不符合自编程的时序要求,有没有办法可以少点,因为现在是在app区,跳转后就是boot区的spm指令,指令太长spm就失效
发现加在不同的函数中,生成的指令不同,在另一个函数中是多了1条跳转到此地址的指令
页: [1]
查看完整版本: AVRIAR内嵌汇编定义标号