我关于完结IAP的了解,假如有误,期望能够得到我们的指正
1.IAP部分程序和应用程序分隔两个项目编写。
2.应用程序部分编译前要修正ICF文件,使其代码安排到IAP程序区外,如0x9000
3.IAP项目编译前也要修正ICF文件
a.修正代码编译后地点ROM中的方位,如:0x8000-0x8FFF
b.按网友dianzidog 给出的办法,完结ram运转代码
////////////////////////摘自网友dianzidog的帖子 ///////////////////////////////////
icf文件里边
initialize by copy { ro section MyCodeInRAM };//这句是将代码在程序初始化的时分copy到
RAM的。
place in NearData { ro section MyCodeInRAM };//界说段的方位
c文件里边
void abc(void)@”MyCodeInRAM”//直接将函数限定在段中
{
……
……
……
}
就完结iar中ram运转代码的过程了
//////////////////////////////////////////////////////////////////////////////////////////
////
4.IAP程序经过IAR编译后的HEX文件,运用ST-LINK将代码烧入CPU内
5.应用程序则经过IAP的上位机应用程序经过串口(假定运用UART1协议)下载到已经有IAP程序的CPU
中去。
6.IAP程序项目所需修正后的ICF文件(暂时以STM8S103K为修正目标,摘取与原文件不同部分):
define region NearFuncCode = [from 0x8000 to 0x87FF];//假定BOOTLOADER部分运用了2K的代码空
间
define region FarFuncCode = [from 0x8000 to 0x87FF];
define region HugeFuncCode = [from 0x8000 to 0x87FF];
initialize by copy { ro section MyCodeInRAM };//这句是将代码在程序初始化的时分copy到RAM的
。
place in NearData { ro section MyCodeInRAM };//界说段的方位
7.应用程序项目所需修正后的ICF文件(暂时以STM8S103K为修正目标,摘取与原文件不同部分):
define region NearFuncCode = [from 0x8800 to 0x9FFF];
define region FarFuncCode = [from 0x8800 to 0x9FFF];
define region HugeFuncCode = [from 0x8800 to 0x9FFF];