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");
}

posted @ 2018-07-24 21:27  求隐  阅读(1344)  评论(0编辑  收藏  举报