当前位置: 首页 > news >正文

在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。

http://www.jsqmd.com/news/212579/

相关文章:

  • Java Web 阿博图书馆管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • c# 上传文件,前端FormData
  • 企业级小徐影城管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 大数据领域中ClickHouse的高性能查询技巧
  • 深度学习超导材料与量子器件!!
  • 用影刀RPA抓取"影刀RPA帮助中心"所有层级类目文档链接,并导出Excel | 网页监听实例
  • Skywalking 分布式链路追踪系统
  • 深度学习MOF材料!!
  • 港科校友|潘异:AI创业的弄潮儿
  • 企业微信如何管理部门群(组图)
  • 那个永远积极的人升职了
  • 竞赛毕业设计定制作品---【芳心科技】F. 驾辅盲区预警雷达系统
  • 竞赛毕业设计定制作品---【芳心科技】F. 家庭厨房的防火预警系统
  • 产品多租户功能上新:一份写给开发者的集成与适配指南
  • Python OOP 设计思想 08:继承不是类型建模
  • 怎么CSDN还出现这种问题
  • Eureka在大数据架构中的核心作用与最佳实践
  • autogen能做到但langgraph做不到的能力有哪些
  • 从选题到定稿:7 款 AI 毕业论文工具实测,paperzz 为何是毕业生首选?
  • 【毕业设计】SpringBoot+Vue+MySQL 小徐影城管理系统平台源码+数据库+论文+部署文档
  • 从标题到成稿:paperzz 毕业论文功能如何让学术写作 “少走弯路”
  • 从 “选题卡壳” 到 “答辩通关”:paperzz 毕业论文 AI 功能的学术写作 “四步解法”
  • 【2025最新】基于SpringBoot+Vue的阿博图书馆管理系统管理系统源码+MyBatis+MySQL
  • 硕士论文不用愁:paperzz 毕业论文功能,4 步搞定 3 万字原创范文
  • 六维力矩传感器深度解析:机器人力控技术的关键 内参
  • SpringBoot+Vue 小徐影城管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • SpringBoot+Vue 网上购物商城系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 修复seata的HikariCP中加载驱动程序类的问题
  • 基于Python+Django+SSM旅游数据分析与推荐系统(源码+LW+调试文档+讲解等)/旅游数据挖掘/旅游数据研究/旅游分析系统/旅游推荐技术/旅游数据分析工具/旅游推荐算法
  • 基于SpringBoot+Vue的教师工作量管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】