第一个检查
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) //检查栈顶地址是否合法.