STM8 RAM
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];
评论