news 2026/5/2 3:43:41

在IAR Embedded Workbench for Renesas RH850中实现ROPI

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在IAR Embedded Workbench for Renesas RH850中实现ROPI

随着汽车智能化程度的提高,集成的ECU(Electronic Control Unit)数量不断增加,OTA(Over-the-Air)技术变得越来越普遍,它允许车辆通过无线网络接收软件更新,从而实现功能升级和性能改进,提高了便利性。

根据硬件的不同特性,OTA有对应的实现策略:[1]

  • 如果硬件支持A/B Swap,对应的应用程序只需要链接一次就可以在两个不同的物理地址运行;

  • 如果硬件不支持A/B Swap,对应的应用程序可以通过ROPI(Read-Only Position-Independent)的方式实现在不同的物理地址运行。

Renesas RH850系列MCU在汽车行业中广泛使用,IAR Embedded Workbench for Renesas RH850是一套完整的集成开发环境,符合ISO 26262功能安全标准,支持Renesas RH850的编译和调试。

本文主要介绍如何在IAR Embedded Workbench for Renesas RH850中实现ROPI。

01.Renesas RH850 ROPI介绍

Renesas RH850 ROPI通过TP寄存器来实现,即对应代码和常量的访问不是通过绝对地址,而是通过基于TP的相对地址访问:

02.在IAR Embedded Workbench for Renesas RH850中实现ROPI

在IAR Embedded Workbench for Renesas RH850中实现ROPI非常方便,只需要勾选对应的ROPI编译选项(General Options > Position-independence > Code and read-only data):

下面通过一个简单的例子介绍如何在IAR Embedded Workbench for Renesas RH850中实现ROPI。

假设对应Code Flash的地址区间是:0x00000000 ~ 0x001FFFFF (2MB)。其中Bootloader的地址区间是0x00000000 ~ 0x0001FFFF (128KB) ,而Application的地址区间分别为: 0x00020000 ~ 0x0010FFFF (960KB) 和0x00110000 ~ 0x001FFFFF (960KB) 。

Application链接的时候使用的地址区间0x00020000 ~ 0x0010FFFF:

define region ROM_1ST_region = mem:[from 0x00020000 to 0x0010FFFF]; "RESET":place at address mem:0x00020000 { block .reset };

map文件显示对应Application放到地址区间0x00020000 ~ 0x0010FFFF:

在Bootloader调试选项(Debugger > Images > Download extra image)中添加对应Application.out文件并配置对应的Offset (0x00110000 - 0x00020000 = 0x000F0000):

在Bootloader工程中下载调试来验证对应Application是否支持ROPI。

Bootloader跳转到Application的复位向量表地址0x00110000:

然后成功跳转到Application的入口函数__iar_program_start:

最后成功跳转到main函数,说明对应Application成功实现ROPI(因为Application链接到地址区间0x00020000 ~ 0x0010FFFF,同样可以在地址区间0x00110000 ~ 0x001FFFFF正常运行):

03.注意事项

对应GP和TP寄存器通常来说会在启动代码里面初始化:

如果ROPI程序中有需要跳转到其他非ROPI程序中使用绝对地址运行的函数(比如对应函数运行在RAM的绝对地址),那么在ROPI程序中需要使用__absolute关键字声明对应函数:

调试ROPI程序的时候,如果ROPI程序实际运行地址区间跟ROPI程序链接的地址区间不一样的时候,需要配置对应的Offset(对应Offset的值是程序实际运行地址减去程序链接的地址)。另外Debug info only选项表示调试器只加载对应调试信息,而不下载对应程序。

如果使用Renesas Smart Configurator生成对应的工程,由于Renesas Smart Configurator生成的r_cg_intvector.c文件里面中断向量表的名字是INT_Vectors(而不是IAR默认的中断向量表的名字),所以需要修改对应的r_cg_intvector.c文件,IAR里面的启动文件cstartup.s和icf文件。

下面以RH850/F1KM-S2为例:

_cg_intvector.c文件:添加对应ROPI模式下的声明,把对应INT_Vector[]和INT_Vectors_Init[]分别放到EIINTTBL和EIINTTBL.init section当中:

cstartup.s:_interrupt_vector_table_core_1替换成_INT_Vectors, .table.interrupt_core_1.init替换成EIINTTBL.init:

icf文件:.table.interrupt_core_1替换成EIINTTBL,.table.interrupt_core_1.init替换成EIINTTBL.init:

04.总结

本文主要以RH850/F1KM-S2为例介绍了如何在IAR Embedded Workbench for Renesas RH850中实现ROPI。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 11:10:02

修复seata的HikariCP中加载驱动程序类的问题

文章目录引言问题引入问题分析在druid时在Hikari时问题解决总结引言 大家好!今天我们一起探讨一下一个在seata 2.5.0版本修复的小bug,如标题所言,是和数据库连接池有关的驱动加载有关的问题,让我们一起来看看吧。 问题引入 在之…

作者头像 李华
网站建设 2026/4/27 6:06:11

认监委推荐|招投标加分资质清单:ISO/ITSS/CMMI等五大类认证详解

经常参与招投标的企业肯定会在标书中看到各种认证以及资质的加分项,但是各行各业各体系,各体系又各不相同,每一项体系认证的用处不仅为投标加分,更可为企业未来发展打下坚实基础。 那么如何为企业匹配到最适合的资质认证&#xf…

作者头像 李华
网站建设 2026/4/18 9:17:20

毅硕HPC | InfiniBand网络在HPC集群中的核心应用

一、引言: HPC 离不开 InfiniBand网络是高性能计算集群的“神经系统”——它决定了计算资源的协同效率、应用的可扩展性,以及最终的科学发现速度。在众多网络技术中,InfiniBand(IB)凭借其超低延迟、高带宽和硬件级卸载…

作者头像 李华
网站建设 2026/4/26 1:09:45

OLAP助力大数据:实现快速决策的秘诀

OLAP助力大数据:实现快速决策的秘诀关键词:OLAP、大数据分析、多维数据、快速决策、商业智能摘要:在数据爆炸的今天,企业如何从海量数据中快速“挖”出决策所需的关键信息?OLAP(联机分析处理)正…

作者头像 李华
网站建设 2026/4/24 6:04:15

GEO优化服务报价与全功能解析

摘要当潜在客户越来越多地使用ChatGPT、Kimi、文心一言等AI对话引擎来替代传统搜索,提出诸如“制造业用什么MES系统好?”或“本地可靠的B2B软件供应商推荐?”等问题时,许多企业的品牌信息却在这些关键决策场景中“消失”了。这并非…

作者头像 李华
网站建设 2026/5/1 9:01:17

微软星标25万!AI Agents入门教程爆火,零基础也能轻松构建智能体

2025年被业界公认为“AI Agent元年”,这一技术已从概念验证全面迈入企业级规模化落地阶段,据Gartner调研数据显示,截至2025年4月,已有79%的企业开始将AI Agent融入核心工作流程,成为降本增效的关键引擎。就在这一技术风…

作者头像 李华