对原子的IAP例程中四个栈顶地址检查说明

第一个检查

if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.

更新固件时,检查固件为FLASH固件,后将固件从SRAM复制到FLASH

串口接收过来的数据,是从:0X20001000开始存储的。 第一个4个字节是MSP地址,第二个4个字节,才是复位中断向量的入口地址。 &0xFF000000就是取最高8位。因为FLASH的地址范围是0X0800 0000开始的。这可以一定程度上确保地址范围正常。

第二个检查

执行固件时,检查固件为FLASH固件,并执行

if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.

 

第三个检查

因为接收数据时放在SRAM里,所以不用复制过程,直接执行

执行固件时,检查固件为SRAM固件,并执行

if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x20000000)//判断是否为0X20XXXXXX.

 

第三个检查

检查代码第一个地址,是否为合法的MSP

第二个地址为中断向量表地址

if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)    //检查栈顶地址是否合法.

你可能感兴趣的:(实战的工程)