IAP程序跳转到APP只能运行大约2秒

2019-07-14 13:39发布

从IAP跳转到APP的代码:
#define APP_ADDR                0X08010000
u16 AppProgramRun(void)//run in application program
{
    vu32  AppSpInitVal;           //App程序的SP初值.
    vu32  AppJumpAddr;            //APP程序的跳转地址.即,APP程序的入口.
    void    (*pAppFun)(void);       //定义一个函数指针.用于指向APP程序入口.
   
    AppSpInitVal = *(vu32 *)APP_ADDR;             //取APP的SP初值.   
    AppJumpAddr = *(vu32 *)(APP_ADDR + 4);        //取程序入口.
    IWDG_ReloadCounter();
    NVIC_DeInit ();                                 //恢复NVIC为复位状态.使中断不再发生.
    __MSR_MSP (AppSpInitVal);                       //设置SP.  问题点就在这里
    pAppFun = (void (*)(void))AppJumpAddr;          //生成跳转函数.
    (*pAppFun) ();                                  //跳转.不再返回.
    return (0x0);
}

问题:如果设置了" __MSR_MSP (AppSpInitVal);                       //设置SP.,则跳转过去大约2秒就又回到IAP程序了;而不操作这个SP,则可以正常运行,实际上就是在IAP与APP同时运作,SP堆栈占用了IAP运行中的,觉得有点浪费,想进入APP后,程序自己重新建立新的堆栈,利用率更高点,网上也是这样操作的,可我的为什么就不能重新设置SP堆栈呢?

还请大师们给指点12,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。