微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM8 RAM

STM8 RAM

时间:11-11 来源:互联网 点击:
我关于实现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];

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top