隨著汽車智能化程度的提高,集成的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。
01Renesas 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:[from0x00020000to0x0010FFFF]; "RESET":place at addressmem: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。
參考文獻:
1.https://www.vector.com/us/en/products/application-areas/embedded-software/embedded-trends/ota-update-approaches/
2.RH850 User’s Manual: Software
3.IAR RH850 C/C++ Development Guide
4.IAR RH850 C-SPY Debugging Guide
-
mcu
+關注
關注
147文章
18924瀏覽量
398005 -
嵌入式
+關注
關注
5198文章
20442瀏覽量
333973 -
寄存器
+關注
關注
31文章
5608瀏覽量
129964 -
IAR
+關注
關注
5文章
410瀏覽量
38537
原文標題:在IAR Embedded Workbench for Renesas RH850中實現ROPI
文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
瑞薩RH850P1M-C芯片或者RH850P系列誰用過,用什么配置軟件啊?
TRACE32支持RH850系列
RH850多核嵌入式目標的基于多核模型的開發
IAR Systems開發工具3.10版IAR全面支持Renesas RH850
Renesas Flash Programmer V2.04 Flash memory programming software 用戶手冊 RH850, RX64x
Renesas Flash Programmer V2.04 Flash memory programming software 用戶手冊 RH850, RX64x
rh850與r7f7的關系 如何使用RH850系列MCU進行開發
在IAR Embedded Workbench for Renesas RH850中實現ROPI
評論