本帖最后由 terminator-04 于 2016-10-21 17:47 编辑
IAP从0x08000000开始,APP1从0x800D000开始,APP2从0x8026000开始。
中断偏移我在APP1和APP2的开始都设了的:代码如下:
if ((*(uint16_t *)(APP_FLAG_ADDRESS)) != 0xAAAA) //有效程序存储在程序区1
{
NVIC_SetVectorTable(NVIC_VectTab_FLASH, APPLICATION_1_ADDRESS);
}
else //有效程序存储在程序区2
{
NVIC_SetVectorTable(NVIC_VectTab_FLASH, APPLICATION_2_ADDRESS);
}
我试了一下,从APP1也不能跳到IAP,更不谈再跳到APP2了,但是从IAP跳到APP1和APP2都是可以的。很奇怪。
所以我目前的处理就是在对APP升级后进行一次系统复位,也就是用NVIC_SystemReset()函数,这样从IAP开始,再根据标志位跳转到相应的APP。
|