求助原子哥关于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条回答
正点原子
1楼-- · 2019-07-20 12:08
前者是判断是否属于内存范围。后者是判断是否属于FLASH范围。  +4是指向reset 向量地址。
ysq7120
2楼-- · 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.
        }
}       
thunder520
3楼-- · 2019-07-20 17:55
 精彩回答 2  元偷偷看……
lzq12
4楼-- · 2019-07-20 23:29
这两个的区别是0x20000000是跳转到RAM去运行,0x08000000是跳转到FLASH去运行,至于是0x20000000还是0x08000000这个就是我们跳转的APP的bin文件设置的,也就是说这个APP程序在编写的时候,在option for Target里面IROM1设置的地址。原子哥的跳转是把bin文件的内容拷贝到指定的RAM,然后在跳转运行的,所以是判断0x20000000,如果你要跳转的程序是在FLASH里面运行,那就是0x08000000。需要注意的是原子哥的跳转,由于RAM的大小有限,所以对bin文件有大小限制,在100K左右。+4我看了好像就是向量表的地址偏移。
jermy_z
5楼-- · 2019-07-20 23:33
 精彩回答 2  元偷偷看……
zhanminlove
6楼-- · 2019-07-21 01:09
 精彩回答 2  元偷偷看……

一周热门 更多>