介紹
基于IAR實(shí)現(xiàn)C文件指定地址存放&函數(shù)指定地址存放,定義變量指定地址。
開(kāi)發(fā)環(huán)境:IAR for RL78 2.21
芯片:R5F510NPJ
仿真器:E1
主要內(nèi)容
一、C文件指定地址存放&函數(shù)指定地址存放
1首先需要根據(jù)自己需要指定存放的C文件里面程序所占大小來(lái)規(guī)劃自己的空間。
2可根據(jù)編譯生成的map文件來(lái)定位C文件所占大小。
如何生成map文件如下圖所示:
3通過(guò)查看map文件就可以知道我們所有C文件所占空間大小了。在MODULE SUMMARY一欄,如下圖所示:
4根據(jù)map文件我們知道C文件:r_cg_cgc.c文件所占大小為217Byte,修改連接文件icf如下圖所示:
具體命令如下:
左右滑動(dòng)查看更多
//默認(rèn)配置 //define region ROM_near = mem:[from 0x000D8 to 0x0FFFF] - EXLUDE_ROM_REGION; //define region ROM_far = mem:[from 0x000D8 to 0x0FFFF] | mem:[from 0x10000 to 0x1FFFF] | mem:[from 0x20000 to 0x2FFFF] | mem:[from 0x30000 to 0x3FFFF] - EXLUDE_ROM_REGION; //define region ROM_huge = mem:[from 0x000D8 to 0x3FFFF] - EXLUDE_ROM_REGION; //下邊默認(rèn)的空間都需要更改,避開(kāi)自定義開(kāi)辟的空間段 define region ROM_near = mem:[from 0x000D8 to 0x07FFF] - EXLUDE_ROM_REGION; define region ROM_far = mem:[from 0x000D8 to 0x07FFF] | mem:[from 0x10000 to 0x1FFFF] | mem:[from 0x20000 to 0x2FFFF] | mem:[from 0x30000 to 0x3FFFF] - EXLUDE_ROM_REGION; define region ROM_huge = mem:[from 0x000D8 to 0x07FFF] | mem:[from 0x10000 to 0x3FFFF]- EXLUDE_ROM_REGION; //定義自己開(kāi)辟的空間 define region ROM1 = mem:[from 0x08000 to 0x0FFFF]; //在自己開(kāi)辟的空間里面定義一個(gè)段 place in ROM1 { readonly section NEW_SECTION1}; //把r_cg_cgc.c文件里面的程序從0x08000開(kāi)始放置 place at address mem:0x08000 { ro section .textf object r_cg_cgc.o };
注意
A、自己開(kāi)辟的空間需要根據(jù)需要存放C文件所占用空間大小來(lái)定義。本文只是為了方便操作定義了一塊比較大的空間。
B、place at address mem:0x08000 { ro section .textf object r_cg_cgc.o }; 該條命令中需要根據(jù)自己代碼是否超過(guò)64K來(lái)配置,跟IAR配置有關(guān)系:
當(dāng)IAR配置如下圖所示時(shí),需要更換命令為:
place at address mem:0x08000 { ro section .text object r_cg_cgc.o }
5一切配置好后,編譯就可以看到我們指定的C文件(r_cg_cgc.c里面含有兩個(gè)函數(shù):
R_CGC_Create() test1() )
就放在了我們指定地址的地方了,如下圖所示:
6上文中我們?cè)谧约洪_(kāi)辟的空間里面定義了一個(gè)段,也是用來(lái)分配自己指定函數(shù)地址的,如果函數(shù)不在同一個(gè)C文件里面可以通過(guò)如下方法
在我們需要指定的函數(shù)上邊加上如下代碼:
#pragma location = "NEW_SECTION1" Void fun() { }
NEW_SECTION1是我們自己定義的段名,可以根據(jù)自己來(lái)定義。如下圖所示:
二、定義變量指定地址
定義的變量只能單獨(dú)的添加,沒(méi)有統(tǒng)一操作的方法,且方法很多,這里只介紹如下方法,在ICF里面更改定義的RAM,具體操作如下圖所示:
具體命令如下:
左右滑動(dòng)查看更多
//默認(rèn)RAM配置 //define region SADDR = mem:[from 0xFFE20 to 0xFFEDF] - EXLUDE_RAM_REGION; //define region RAM_near = mem:[from 0xFBF00 to 0xFFE1F] - EXLUDE_RAM_REGION; //define region RAM_far = mem:[from 0xFBF00 to 0xFFE1F] - EXLUDE_RAM_REGION; //define region RAM_huge = mem:[from 0xFBF00 to 0xFFE1F] - EXLUDE_RAM_REGION; //避開(kāi)自己開(kāi)辟的空間 define region SADDR = mem:[from 0xFFE20 to 0xFFEDF] - EXLUDE_RAM_REGION; define region RAM_near = mem:[from 0xFBF00 to 0xFE0FF] | mem:[from 0xFFC00 to 0xFFE1F]- EXLUDE_RAM_REGION; define region RAM_far = mem:[from 0xFBF00 to 0xFE0FF] | mem:[from 0xFFC00 to 0xFFE1F]- EXLUDE_RAM_REGION; define region RAM_huge = mem:[from 0xFBF00 to 0xFE0FF] | mem:[from 0xFFC00 to 0xFFE1F]- EXLUDE_RAM_REGION; //重新定義開(kāi)辟RAM空間 define region RAM1 = mem:[from 0xFE100 to 0xFFBFF]; //在自己開(kāi)辟的RAM定義一個(gè)段 place in RAM1 { rw section RAM_METER};
在C代碼里面添加:
#pragma location = "RAM_METER" unsigned char bufff[100];
RAM_METER 是我們自己定義的段名,可以根據(jù)自己來(lái)定義。如下圖所示:
結(jié)論
當(dāng)部分函數(shù)或是整個(gè)C文件需要放在芯片特定地址時(shí),可以按照上述方法簡(jiǎn)單實(shí)現(xiàn)。
審核編輯:湯梓紅
-
IAR
+關(guān)注
關(guān)注
5文章
392瀏覽量
38106 -
程序
+關(guān)注
關(guān)注
117文章
3832瀏覽量
84359 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4400瀏覽量
66366 -
C文件
+關(guān)注
關(guān)注
0文章
12瀏覽量
3180
發(fā)布評(píng)論請(qǐng)先 登錄
RL78學(xué)***
求IAR Embedded Workbench for RL78版本2.21.2
[IAR EW] Renesas Starter Kit for RL78/G13 快速入門指南 Rev.1.00
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 快速入門指南 Rev.1.00](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[IAR EW] Renesas Starter Kit for RL78/G13 Tutorial 手冊(cè) Rev.1.00
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 Tutorial 手冊(cè) Rev.1.00](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[IAR EW] Renesas Starter Kit for RL78/G13 軟件 Help 手冊(cè)
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 軟件 Help 手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
EEPROM 仿真軟件 RL78 Type 02RL78/F23 和 RL78/F24 用戶手冊(cè)

[IAR EW] Renesas Starter Kit for RL78/G13 用戶手冊(cè) Rev.1.00
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 用戶手冊(cè) Rev.1.00](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[IAR EW] Renesas Starter Kit for RL78/G13 Tutorial 手冊(cè) Rev.1.00
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 Tutorial 手冊(cè) Rev.1.00](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
[IAR EW] Renesas Starter Kit for RL78/G13 軟件 Help 手冊(cè)
![[<b class='flag-5'>IAR</b> EW] Renesas Starter Kit for <b class='flag-5'>RL78</b>/G13 軟件 Help 手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78/G23 SMS電源監(jiān)控應(yīng)用說(shuō)明

e2studio2024-01 RL78插件智能配置程序發(fā)布說(shuō)明

RL78的代碼生成器發(fā)布說(shuō)明

RL78/G15組和RL78/G16組 瑞薩Flash示例程序01型SC版本應(yīng)用說(shuō)明

評(píng)論