STM32带UCOS系统更新IAP的一个问题
1,普通用的STM32更新IAP程序,碰到进入APP程序时,进入HardFault_Handler 错误
2,解决办法:
在进入前关中断,重置PSP与MSP
__set_PRIMASK(1); // 关中断
__set_BASEPRI(0);
__set_FAULTMASK(0);
__set_PSP(*((volatile unsigned long int *)appxaddr));// 重新设置进程PSP堆栈地址,UCOS用
__set_MSP(*((volatile unsigned long int *)appxaddr)); // 重新设置MSP,中断用
__set_CONTROL(0);
if(((*(vu32*)appxaddr) & 0x2FFE0000) == 0x20000000) //检查栈顶地址是否合法.
{
printf("Jump to the new program.\r\n");
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP.
}else
{
printf("Jump to the new program default\r\n");
}
本文来自博客园,作者:求隐,转载请注明原文链接:https://www.cnblogs.com/duguqiuying/articles/9362726.html