您的位置:首页 > 其它

STM32的IAP在线升级的源码中的地址解读

2016-12-05 13:30 561 查看
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.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: