求助原子哥关于IAP代码的问题

2019-07-20 11:09发布

官方的IAP跳转如下
else
  {
    /* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
    if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
      Jump_To_Application();
    }
  }


原子哥的如下
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
                        {         
                                iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
                        }

求助大家红体部分 0x2FFE0000 ) == 0x20000000)    0xFF000000)==0x08000000)
这有什么区别,还有APP地址后面+4是为了向量表吗?谢谢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
ysq7120
2019-07-20 15:57
你搞错了吧。APPLICATION_ADDRESS  跟 FLASH_APP1_ADDR+4 不是一个地址

原子的是在函数里判断
void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //¼ì2éÕ»¶¥μØÖ·êÇ·ñoÏ·¨.
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //óû§′úÂëÇøμú¶t¸ö×ÖÎa3ìDò¿aê¼μØÖ·(¸′λμØÖ·)               
                MSR_MSP(*(vu32*)appxaddr);                                        //3õê¼»ˉAPP¶ÑÕ»Ö¸Õë(óû§′úÂëÇøμÄμúò»¸ö×ÖóÃóú′æ·ÅÕ»¶¥μØÖ·)
                jump2app();                                                                        //ìø×aμ½APP.
        }
}       

一周热门 更多>