STM32 IAP升级 知识点记录
1、if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)
很多人会疑惑这个判断是什么意思,尤其是0x20001000这个地址怎么来?
原子例程中有提到:“串口接收过来的数据,是从:0X20001000开始存储的。”
即:0x20001000是串口数据缓存数组的起始地址,也就是USART_RX_BUF的起始地址。但实际情况下,USART_RX_BUF的起始地址不一定是0x20001000。所以书写的时候,需注意。
(*(vu32*)(0X20001000+4),这个就是取中断向量的入口地址。如下图,bin文件中,0~3是MSP地址,4~7是中断向量入口地址。
(*(vu32*)(0X20001000+4) = [01 01 00 08] = 0x08000101
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000) = if((0x08000101&0xFF000000)==0x08000000)