STM8 RAM
1.IAP部分程序和應(yīng)用程序分開兩個項目編寫。
2.應(yīng)用程序部分編譯前要修改ICF文件,使其代碼安排到IAP程序區(qū)外,如0x9000
3.IAP項目編譯前也要修改ICF文件
a.修改代碼編譯后所在ROM中的位置,如:0x8000-0x8FFF
b.按網(wǎng)友dianzidog 給出的方法,實現(xiàn)ram運行代碼
////////////////////////摘自網(wǎng)友dianzidog的帖子 ///////////////////////////////////
icf文件里面
initialize by copy { ro section MyCodeInRAM };//這句是將代碼在程序初始化的時候copy到
RAM的。
place in NearData { ro section MyCodeInRAM };//定義段的位置
c文件里面
void abc(void)@"MyCodeInRAM"http://直接將函數(shù)限定在段中
{
......
......
......
}
就完成iar中ram運行代碼的步驟了
//////////////////////////////////////////////////////////////////////////////////////////
////
4.IAP程序經(jīng)過IAR編譯后的HEX文件,使用ST-LINK將代碼燒入CPU內(nèi)
5.應(yīng)用程序則通過IAP的上位機(jī)應(yīng)用程序通過串口(假設(shè)使用UART1協(xié)議)下載到已經(jīng)有IAP程序的CPU
中去。
6.IAP程序項目所需修改后的ICF文件(暫時以STM8S103K為修改對象,摘取與原文件不同部分):
define region NearFuncCode = [from 0x8000 to 0x87FF];//假設(shè)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.應(yīng)用程序項目所需修改后的ICF文件(暫時以STM8S103K為修改對象,摘取與原文件不同部分):
define region NearFuncCode = [from 0x8800 to 0x9FFF];
define region FarFuncCode = [from 0x8800 to 0x9FFF];
define region HugeFuncCode = [from 0x8800 to 0x9FFF];
評論