![134a866a-0e72-11ee-962d-dac502259ad0.gif](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuAWDt9AABBdvwiMRc892.gif)
介紹
基于IAR實(shí)現(xiàn)C文件指定地址存放&函數(shù)指定地址存放,定義變量指定地址。
開發(fā)環(huán)境:IAR for RL78 2.21
芯片:R5F510NPJ
仿真器:E1
主要內(nèi)容
一、C文件指定地址存放&函數(shù)指定地址存放
1
首先需要根據(jù)自己需要指定存放的C文件里面程序所占大小來規(guī)劃自己的空間。
2
可根據(jù)編譯生成的map文件來定位C文件所占大小。
如何生成map文件如下圖所示:
![1374d7e4-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuAOdi3AAGA_v6NBK0679.jpg)
![1384baba-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuAYqESAAC80a0Ello067.jpg)
![13a52214-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuAQu9ZAACA9hgg7vA078.jpg)
3
通過查看map文件就可以知道我們所有C文件所占空間大小了。在MODULE SUMMARY一欄,如下圖所示:
![13b906d0-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuAZ2ZYAADEE96NWnc634.jpg)
4
根據(jù)map文件我們知道C文件:r_cg_cgc.c文件所占大小為217Byte,修改連接文件icf如下圖所示:
![13ccbf5e-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuARkwaAAB-tpIcKbU446.jpg)
具體命令如下:
左右滑動(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)的空間都需要更改,避開自定義開辟的空間段
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;
//定義自己開辟的空間
define region ROM1 = mem:[from 0x08000 to 0x0FFFF];
//在自己開辟的空間里面定義一個(gè)段
place in ROM1 { readonly section NEW_SECTION1};
//把r_cg_cgc.c文件里面的程序從0x08000開始放置
place at address mem:0x08000 { ro section .textf object r_cg_cgc.o };
注意
A、自己開辟的空間需要根據(jù)需要存放C文件所占用空間大小來定義。本文只是為了方便操作定義了一塊比較大的空間。
B、place at address mem:0x08000 { ro section .textf object r_cg_cgc.o }; 該條命令中需要根據(jù)自己代碼是否超過64K來配置,跟IAR配置有關(guān)系:
![13ff2534-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7C/wKgZomTnwtuANt2oAACtVhO8YlA539.jpg)
當(dāng)IAR配置如下圖所示時(shí),需要更換命令為:
place at address mem:0x08000 { ro section .text object r_cg_cgc.o }
![14260f5a-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAJi2YAACuC7epIzI035.jpg)
5
一切配置好后,編譯就可以看到我們指定的C文件(r_cg_cgc.c里面含有兩個(gè)函數(shù):
R_CGC_Create() test1() )
就放在了我們指定地址的地方了,如下圖所示:
![1433ecb0-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAXNRiAADWkl3UW7w850.jpg)
![143c1868-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAVbBsAACqZKJZsL0971.jpg)
6
上文中我們?cè)谧约洪_辟的空間里面定義了一個(gè)段,也是用來分配自己指定函數(shù)地址的,如果函數(shù)不在同一個(gè)C文件里面可以通過如下方法
在我們需要指定的函數(shù)上邊加上如下代碼:
Void fun()
{
}
NEW_SECTION1是我們自己定義的段名,可以根據(jù)自己來定義。如下圖所示:
![14676f40-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAF-QHAADDEt_W4wA390.jpg)
![148e142e-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAPGlTAADSwb8xht0298.jpg)
二、定義變量指定地址
定義的變量只能單獨(dú)的添加,沒有統(tǒng)一操作的方法,且方法很多,這里只介紹如下方法,在ICF里面更改定義的RAM,具體操作如下圖所示:
![149f3434-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAHXZrAABwU6TDg-w035.jpg)
具體命令如下:
左右滑動(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;
//避開自己開辟的空間
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;
//重新定義開辟RAM空間
define region RAM1 = mem:[from 0xFE100 to 0xFFBFF];
//在自己開辟的RAM定義一個(gè)段
place in RAM1 { rw section RAM_METER};
在C代碼里面添加:
unsigned char bufff[100];
RAM_METER 是我們自己定義的段名,可以根據(jù)自己來定義。如下圖所示:
![14cb16f8-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwtyAfwxsAAES4MNmiHA200.jpg)
![14f4d90c-0e72-11ee-962d-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwt2AdaPxAAEQ2Ab0PJk021.jpg)
結(jié)論
當(dāng)部分函數(shù)或是整個(gè)C文件需要放在芯片特定地址時(shí),可以按照上述方法簡單實(shí)現(xiàn)。
更多資料分享
您可識(shí)別下方二維碼查看:
![150a33f6-0e72-11ee-962d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwt2AJpPaAAADFnHXUF4515.png)
![1525972c-0e72-11ee-962d-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9B/7D/wKgZomTnwt2AARhLAAACxg-VBOA149.png)
-
mcu
+關(guān)注
關(guān)注
146文章
17353瀏覽量
352777 -
瑞薩
+關(guān)注
關(guān)注
35文章
22312瀏覽量
86819
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
從Renesas RL78到基于Arm的MSPM0的遷移指南
![從Renesas <b class='flag-5'>RL78</b>到基于Arm的MSPM0的遷移指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78/G23技術(shù)支持案例分享(上)
![<b class='flag-5'>RL78</b>/G23技術(shù)支持案例分享(上)](https://file1.elecfans.com/web2/M00/FF/50/wKgaomah9qqARQHqAAAvYKDJmtk761.png)
RL78/G13 自編方案(通過UART收到的數(shù)據(jù)) CC-RL Rev.1.01
![<b class='flag-5'>RL78</b>/G13 自編方案(通過UART收到的數(shù)據(jù)) CC-<b class='flag-5'>RL</b> Rev.1.01](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78/G13 自編方案(通過CSI收到的數(shù)據(jù)) CC-RL Rev.1.01
![<b class='flag-5'>RL78</b>/G13 自編方案(通過CSI收到的數(shù)據(jù)) CC-<b class='flag-5'>RL</b> Rev.1.01](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78/G13 自編方案(通過IIC收到的數(shù)據(jù)) CC-RL Rev.1.01
![<b class='flag-5'>RL78</b>/G13 自編方案(通過IIC收到的數(shù)據(jù)) CC-<b class='flag-5'>RL</b> Rev.1.01](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78系列MCU DMA在UART中的使用
![<b class='flag-5'>RL78</b>系列MCU DMA在UART中的使用](https://file1.elecfans.com/web2/M00/FD/E5/wKgaomaXY-mAfGzkAAAQqVE71F4591.png)
RL78/G22微控制器串口調(diào)試步驟
![<b class='flag-5'>RL78</b>/G22微控制器串口調(diào)試步驟](https://file1.elecfans.com/web2/M00/FD/BA/wKgaomaWMdqAVZzUAAAT7e54iio399.png)
RL78/F24 CANFD參考例程
![<b class='flag-5'>RL78</b>/F24 CANFD參考例程](https://file1.elecfans.com/web2/M00/EF/24/wKgZomZv5Z-AR9yJAABZgPfc7yc186.png)
RL78/G24快速原型開發(fā)板資料包大全
基于RL78/G16 FPB的觸摸樣例工程創(chuàng)建演示流程
![基于<b class='flag-5'>RL78</b>/G16 FPB的觸摸樣例工程創(chuàng)建演示流程](https://file1.elecfans.com/web2/M00/E8/85/wKgaomZMPF2AWt2yAAATHKmlTVM243.jpg)
瑞薩RL78/F24和RL78/F23 MCU適用于下一代邊緣應(yīng)用
![瑞薩<b class='flag-5'>RL78</b>/F24和<b class='flag-5'>RL78</b>/F23 MCU適用于下一代邊緣應(yīng)用](https://file1.elecfans.com/web2/M00/C3/09/wKgZomXpUoiAMQ_YAABF1i84E4M811.png)
RL78/G15組和RL78/G16組 瑞薩Flash示例程序01型SC版本應(yīng)用說明
![<b class='flag-5'>RL78</b>/G15組和<b class='flag-5'>RL78</b>/G16組 瑞薩Flash示例<b class='flag-5'>程序</b>01型SC版本應(yīng)用<b class='flag-5'>說明</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78系列 Flash自編程庫01型日語版本用戶手冊(cè)
![<b class='flag-5'>RL78</b>系列 Flash自編程庫01型日語版本用戶手冊(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
16位單片機(jī)RL78系列Rev.1.20發(fā)布說明
![16位單片機(jī)<b class='flag-5'>RL78</b>系列Rev.1.20發(fā)布<b class='flag-5'>說明</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RL78系列 Data Flash Library Type04軟件包3.0版發(fā)布說明
![<b class='flag-5'>RL78</b>系列 Data Flash Library Type04軟件包3.0版發(fā)布<b class='flag-5'>說明</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論