想做一个从APP到IAP无缝跳转进行程序升级的程序,刚做了一个,发现能从APP程序转到IAP,但不能正常运行,不知道是不是堆栈没有做好,一从APP跳转到IAP,能执行一小段IAP和程序,然后就死机了,因为没法用Debug调试,不知道问题错在哪里,请各位指点迷津。
下面是跳转代码:
#define FLASH_IAP_ADDR 0x08000000 //IAP程序起始地址(存放在片内FLASH)
void app_load_iap(u32 iapxaddr)
{
if(((*(vu32*)iapxaddr)&0x2FFE0000) == 0x20000000) //检查栈顶地址是否合法
{
jumptoiap = (iapfun)*(vu32*)(iapxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)iapxaddr); //初始化IAP堆栈指针(IAP代码区的第一个字用于存放栈顶地址)
jumptoiap(); //跳转到IAP
}
}
void IAP_Command(void )
{
app_load_iap(FLASH_IAP_ADDR);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>