2 soyman soyman 于 2014.09.21 13:58 提问

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的复位中断,程序由此开始执行
}

}

1个回答

DengPihui
DengPihui   2014.09.30 08:51

从这段代码上看并没有什么问题,最好再找找有没有其他的原因,如应用程序存放的地址是否正确、应用中中断向量表是否配置正确等。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!