官方的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是为了向量表吗?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原子的是在函数里判断
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.
}
}
一周热门 更多>