跳转应用程序代码
appxaddr:用户代码起始地址
void iap_load_app(uint32 appxaddr)
{
if(((*(__IO uint32_t*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app=(iapfun)*(__IO uint32_t*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
__set_MSP(*(__IO uint32_t*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP.
}
}
map 文件如下图(转的,如侵权请发信通知撤除)
1、如程序起始地址为3000,在中断项量表中,前4个字节即栈顶地址,判断是否正确可以知道程序不无下载;
2、第2个地址为复位地址;程序重启完成用户程序的跳转;