1.ApplicationAddress的内容含义
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
SerialPutString("Execute user Program\r\n\n");
//跳转至用户代码
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
//初始化用户程序堆栈指针
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
解析:
ApplicationAddress:APP程序起始地址,此处为 #define ApplicationAddress 0x8004000
该地址处的内容(对应的值)通过在线仿真是:20000428。如图1:
地址20000428含义,通过查APP程序的.map文件,如图2:
20000000:SRM运行内存起始处
20000428 = 20000000+4+20+400(1024)
2. 0X20001000含义
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
IAP将接收到的APP内容放到运行内存0X20001000处,0x1000(4kb)空间大小的内存留给IAP程序自身用。
3. (ApplicationAddress+4)地址对应内容的含义
if(((*(vu32*) (ApplicationAddress+4) ) &0xFF000000)==0x08000000)
{
iap_load_app(FLASH_APP1_ADDR);
}
解析:
((*(vu32*) (ApplicationAddress+4) ) <<==========>>*(0x8004000+4)
其内容对应的值为08004100如图1所示。
地址08004101的含义是复位中断处理函数入口,通过查APP程序的.map文件,如图3:
4.地址0X20001000+4内容含义
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码
}
解析:
0X20001000:APP运行内存的起始地址
0x20001000+4的内容:是FLASH内存物理地址。如图4.
1.ApplicationAddress的内容含义
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
SerialPutString("Execute user Program\r\n\n");
//跳转至用户代码
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
//初始化用户程序堆栈指针
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
解析:
ApplicationAddress:APP程序起始地址,此处为 #define ApplicationAddress 0x8004000
该地址处的内容(对应的值)通过在线仿真是:20000428。如图1:
地址20000428含义,通过查APP程序的.map文件,如图2:
20000000:SRM运行内存起始处
20000428 = 20000000+4+20+400(1024)
2. 0X20001000含义
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
IAP将接收到的APP内容放到运行内存0X20001000处,0x1000(4kb)空间大小的内存留给IAP程序自身用。
3. (ApplicationAddress+4)地址对应内容的含义
if(((*(vu32*) (ApplicationAddress+4) ) &0xFF000000)==0x08000000)
{
iap_load_app(FLASH_APP1_ADDR);
}
解析:
((*(vu32*) (ApplicationAddress+4) ) <<==========>>*(0x8004000+4)
其内容对应的值为08004100如图1所示。
地址08004101的含义是复位中断处理函数入口,通过查APP程序的.map文件,如图3:
4.地址0X20001000+4内容含义
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码
}
解析:
0X20001000:APP运行内存的起始地址
0x20001000+4的内容:是FLASH内存物理地址。如图4.
---------------------
作者:qq_21476953
来源:CSDN
原文:https://blog.csdn.net/qq_21476953/article/details/53464479
版权声明:本文为博主原创文章,转载请附上博文链接!