void SW_Handler(void) { typedef void (*jump_func_t)(void); jump_func_t jmp = (jump_func_t)FLASH_AREA_BLD_SIZE;//FLASH_AREA_APP_SADDR jmp(); }
论坛已经搜索过IAP相关帖子,也有搜索到相关例程。
上述代码,FLASH_AREA_BLD_SIZE是0x8000,FLASH_AREA_APP_SADDR是0x08000000+FLASH_AREA_BLD_SIZE。
如果用FLASH_AREA_BLD_SIZE是可以跳转成功的,但是FLASH_AREA_APP_SADDR就无法成功跳转。这是什么问题?在其他帖子上看到回复,使用绝对地址和映射地址上一样的。但是实际上就不行。这是什么问题?
如果用FLASH_AREA_APP_SADDR的时候,汇编是这样的:
0x2b6 : lui a6,0x8008 0x2ba : jr a6 0x2bc : j 0x2bc