0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于IAR指定RL78程序地址空间说明

瑞萨MCU小百科 来源:未知 2023-06-19 15:25 次阅读
134a866a-0e72-11ee-962d-dac502259ad0.gif

介绍

基于IAR实现C文件指定地址存放&函数指定地址存放,定义变量指定地址。

开发环境:IAR for RL78 2.21

芯片:R5F510NPJ

仿真器E1

主要内容

一、C文件指定地址存放&函数指定地址存放

1

首先需要根据自己需要指定存放的C文件里面程序所占大小来规划自己的空间。

2

可根据编译生成的map文件来定位C文件所占大小。

如何生成map文件如下图所示:

1374d7e4-0e72-11ee-962d-dac502259ad0.jpg1384baba-0e72-11ee-962d-dac502259ad0.jpg13a52214-0e72-11ee-962d-dac502259ad0.jpg

3

通过查看map文件就可以知道我们所有C文件所占空间大小了。在MODULE SUMMARY一栏,如下图所示:

13b906d0-0e72-11ee-962d-dac502259ad0.jpg

4

根据map文件我们知道C文件:r_cg_cgc.c文件所占大小为217Byte,修改连接文件icf如下图所示:

13ccbf5e-0e72-11ee-962d-dac502259ad0.jpg

具体命令如下:

13ed98a0-0e72-11ee-962d-dac502259ad0.svg

左右滑动查看更多

13ed98a0-0e72-11ee-962d-dac502259ad0.svg
//默认配置
//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;


//下边默认的空间都需要更改,避开自定义开辟的空间段
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]; 


//在自己开辟的空间里面定义一个段
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、自己开辟的空间需要根据需要存放C文件所占用空间大小来定义。本文只是为了方便操作定义了一块比较大的空间。

B、place at address mem:0x08000 { ro section .textf object r_cg_cgc.o }; 该条命令中需要根据自己代码是否超过64K来配置,跟IAR配置有关系:

13ff2534-0e72-11ee-962d-dac502259ad0.jpg

当IAR配置如下图所示时,需要更换命令为:

place at address mem:0x08000 { ro section .text object r_cg_cgc.o }

14260f5a-0e72-11ee-962d-dac502259ad0.jpg

5

一切配置好后,编译就可以看到我们指定的C文件(r_cg_cgc.c里面含有两个函数:

R_CGC_Create() test1() )

就放在了我们指定地址的地方了,如下图所示:

1433ecb0-0e72-11ee-962d-dac502259ad0.jpg143c1868-0e72-11ee-962d-dac502259ad0.jpg

6

上文中我们在自己开辟的空间里面定义了一个段,也是用来分配自己指定函数地址的,如果函数不在同一个C文件里面可以通过如下方法

在我们需要指定的函数上边加上如下代码:

#pragma location = "NEW_SECTION1"  
Void fun()
{


}

NEW_SECTION1是我们自己定义的段名,可以根据自己来定义。如下图所示:

14676f40-0e72-11ee-962d-dac502259ad0.jpg148e142e-0e72-11ee-962d-dac502259ad0.jpg

二、定义变量指定地址

定义的变量只能单独的添加,没有统一操作的方法,且方法很多,这里只介绍如下方法,在ICF里面更改定义的RAM,具体操作如下图所示:

149f3434-0e72-11ee-962d-dac502259ad0.jpg

具体命令如下:

13ed98a0-0e72-11ee-962d-dac502259ad0.svg

左右滑动查看更多

13ed98a0-0e72-11ee-962d-dac502259ad0.svg
//默认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定义一个段
place in RAM1 { rw section RAM_METER};

在C代码里面添加:

#pragma location = "RAM_METER"
unsigned char bufff[100];

RAM_METER 是我们自己定义的段名,可以根据自己来定义。如下图所示:

14cb16f8-0e72-11ee-962d-dac502259ad0.jpg14f4d90c-0e72-11ee-962d-dac502259ad0.jpg

结论

当部分函数或是整个C文件需要放在芯片特定地址时,可以按照上述方法简单实现。

更多资料分享

您可识别下方二维码查看:

150a33f6-0e72-11ee-962d-dac502259ad0.png1525972c-0e72-11ee-962d-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17486

    浏览量

    354632
  • 瑞萨
    +关注

    关注

    36

    文章

    22325

    浏览量

    87196
收藏 人收藏

    评论

    相关推荐

    通过Boot swap实现瑞萨RL78/F24 MCU固件升级

    本文主要说明如何使用已有的程序更新flash中的固件。使用这种方法代码闪存分为两个区域:执行区域和临时区域。瑞萨flash驱动程序RL78 RFD Type02用于对flash进行重新
    的头像 发表于 02-26 09:25 435次阅读
    通过Boot swap实现瑞萨<b class='flag-5'>RL78</b>/F24 MCU固件升级

    从Renesas RL78到基于Arm的MSPM0的迁移指南

    电子发烧友网站提供《从Renesas RL78到基于Arm的MSPM0的迁移指南.pdf》资料免费下载
    发表于 08-23 09:28 0次下载
    从Renesas <b class='flag-5'>RL78</b>到基于Arm的MSPM0的迁移指南

    如何在RL78微控制器上使用EZ-CUBE3

    本章描述了如何使用EZ-CUBE3在RL78微控制器上进行片上调试和Flash编程。
    的头像 发表于 08-01 16:01 1069次阅读
    如何在<b class='flag-5'>RL78</b>微控制器上使用EZ-CUBE3

    RL78/G23技术支持案例分享(上)

    RL78/G23产品发布后得到很多客户的欢迎。它是在RL78/G13上迭代升级。CPU工作时的功耗为41μA/MHz,STOP(保持4KB SRAM)时的功耗为210nA,其低功耗在业内首屈一指。
    的头像 发表于 07-25 14:53 1838次阅读
    <b class='flag-5'>RL78</b>/G23技术支持案例分享(上)

    RL78/G23用于感应式接近传感应用的主要特性

    上一篇文章讲了如何利用MCU实现接近式磁感应技术,本篇将介绍RL78/G23用于感应式接近传感应用的主要特性。
    的头像 发表于 07-25 14:50 1569次阅读
    <b class='flag-5'>RL78</b>/G23用于感应式接近传感应用的主要特性

    RL78/G13 自编方案(通过UART收到的数据) CC-RL Rev.1.01

    电子发烧友网站提供《RL78/G13 自编方案(通过UART收到的数据) CC-RL Rev.1.01.pdf》资料免费下载
    发表于 07-22 10:34 0次下载
    <b class='flag-5'>RL78</b>/G13 自编方案(通过UART收到的数据) CC-<b class='flag-5'>RL</b> Rev.1.01

    RL78/G13 自编方案(通过CSI收到的数据) CC-RL Rev.1.01

    电子发烧友网站提供《RL78/G13 自编方案(通过CSI收到的数据) CC-RL Rev.1.01.pdf》资料免费下载
    发表于 07-22 10:18 0次下载
    <b class='flag-5'>RL78</b>/G13 自编方案(通过CSI收到的数据) CC-<b class='flag-5'>RL</b> Rev.1.01

    RL78/G13 自编方案(通过IIC收到的数据) CC-RL Rev.1.01

    电子发烧友网站提供《RL78/G13 自编方案(通过IIC收到的数据) CC-RL Rev.1.01.pdf》资料免费下载
    发表于 07-22 10:17 0次下载
    <b class='flag-5'>RL78</b>/G13 自编方案(通过IIC收到的数据) CC-<b class='flag-5'>RL</b> Rev.1.01

    RL78系列MCU DMA在UART中的使用

    对于RL78系列的MCU,为了提高运行效率,减少CPU的占用,建议UART数据收发使用DMA功能。DMA(Direct Memory Access)是RL78 MCU内置的一个控制器,能在支持DMA外围硬件的SFR和内部RAM之间不经过CPU而自动传送数据。
    的头像 发表于 07-17 14:24 833次阅读
    <b class='flag-5'>RL78</b>系列MCU DMA在UART中的使用

    RL78/G22微控制器串口调试步骤

    除了具有低电流消耗(CPU工作时:37.5μA/MHz;STOP时:200nA)外,RL78/G22微控制器还配备了丰富的电容触摸通道。完备的16-48引脚封装和32KB-64KB闪存,扩充了新一代RL78通用微控制器的产品线。
    的头像 发表于 07-16 16:36 1009次阅读
    <b class='flag-5'>RL78</b>/G22微控制器串口调试步骤

    如何在esp32的程序体中指定一个变量的绝对地址,或者相对于程序地址的一个固定偏移位置?

    请问一下如何在esp32的程序体中指定一个变量的绝对地址,或者相对于程序地址的一个固定偏移位置?
    发表于 06-21 08:12

    RL78/F24 CANFD参考例程

    RL78/F24新一代超低功耗汽车微控制器,非常适用于实现未来高可靠性的智能执行器和传感器,是低端车身ECU的理想之选。作为对现有RL78/F1x MCU的创新扩展,RL78/F24可满足未来市场
    的头像 发表于 06-17 15:25 2577次阅读
    <b class='flag-5'>RL78</b>/F24 CANFD参考例程

    RL78/G24快速原型开发板资料包大全

      RL78/G24快速原型开发板资料包大全  RL78/G24 快速原型开发板配备RL78/G24微控制器,是一种专门用于各种应用开发试产的原型开发板。它只需连接USB线即可编写/调试程序
    发表于 06-04 16:21 2次下载

    基于RL78/G16 FPB的触摸样例工程创建演示流程

    本篇将分两部分为大家介绍RL78/G16 FPB触摸样例工程创建演示,首先是RL78/G16快速原型开发板(FPB),然后是如何在e2 studio开发环境中创建触摸工程,以及通过添加LED点亮的应用代码来演示触摸按键按下抬起的效果。
    的头像 发表于 05-21 14:13 1165次阅读
    基于<b class='flag-5'>RL78</b>/G16 FPB的触摸样例工程创建演示流程

    瑞萨智能垃圾箱 有效整合新一代RL78微控制器

    环保又高效的新型垃圾处理方式。   瑞萨推出的智能垃圾箱解决方案正是这种变革的典范。它利用光伏(PV)面板和电池供电,有效整合了新一代RL78微控制器。这款垃圾箱不仅可以监控内部的温度、湿度、环境照度和垃圾容量状态,还
    发表于 04-01 16:45 570次阅读