问题描述
- STM32 IAP程序进行到最后一步jump2app();;后就进入hardfault死循环,怎么解决?
-
调用下面的程序后就出错,APP程序写在了FLASH中
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
//(用户代码的第一个字存放的是堆栈的栈顶地址,下面即检查此地址)if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法(用户代码的第一个字存放的是栈顶地址,即检查此地址) { jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位中断向量地址),强制把该地址转化为iapfun类型的函数指针,再赋给函数指针jump2app MSR_MSP(*(vu32*)appxaddr); //设置APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) jump2app(); //跳转到APP的复位中断,程序由此开始执行 }
}
解决方案
从这段代码上看并没有什么问题,最好再找找有没有其他的原因,如应用程序存放的地址是否正确、应用中中断向量表是否配置正确等。
时间: 2024-09-12 21:18:45