隨著汽車智能化程度的提高,集成的ECU(Electronic Control Unit)數(shù)量不斷增加,OTA(Over-the-Air)技術(shù)變得越來越普遍,它允許車輛通過無線網(wǎng)絡(luò)接收軟件更新,從而實(shí)現(xiàn)功能升級(jí)和性能改進(jìn),提高了便利性。
根據(jù)硬件的不同特性,OTA有對(duì)應(yīng)的實(shí)現(xiàn)策略:[1]
如果硬件支持A/B Swap,對(duì)應(yīng)的應(yīng)用程序只需要鏈接一次就可以在兩個(gè)不同的物理地址運(yùn)行;
如果硬件不支持A/B Swap,對(duì)應(yīng)的應(yīng)用程序可以通過ROPI(Read-Only Position-Independent)的方式實(shí)現(xiàn)在不同的物理地址運(yùn)行。
Renesas RH850系列MCU在汽車行業(yè)中廣泛使用,IAR Embedded Workbench for Renesas RH850是一套完整的集成開發(fā)環(huán)境,符合ISO 26262功能安全標(biāo)準(zhǔn),支持Renesas RH850的編譯和調(diào)試。
本文主要介紹如何在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI。
01Renesas RH850 ROPI介紹
Renesas RH850 ROPI通過TP寄存器來實(shí)現(xiàn),即對(duì)應(yīng)代碼和常量的訪問不是通過絕對(duì)地址,而是通過基于TP的相對(duì)地址訪問:


02在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI
在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI非常方便,只需要勾選對(duì)應(yīng)的ROPI編譯選項(xiàng)(General Options > Position-independence > Code and read-only data):

下面通過一個(gè)簡(jiǎn)單的例子介紹如何在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI。
假設(shè)對(duì)應(yīng)Code Flash的地址區(qū)間是:0x00000000 ~ 0x001FFFFF (2MB)。其中Bootloader的地址區(qū)間是0x00000000 ~ 0x0001FFFF (128KB) ,而Application的地址區(qū)間分別為: 0x00020000 ~ 0x0010FFFF (960KB) 和0x00110000 ~ 0x001FFFFF (960KB) 。
Application鏈接的時(shí)候使用的地址區(qū)間0x00020000 ~ 0x0010FFFF:
define region ROM_1ST_region =mem:[from0x00020000to0x0010FFFF]; "RESET":place at addressmem:0x00020000 { block .reset };
map文件顯示對(duì)應(yīng)Application放到地址區(qū)間0x00020000 ~ 0x0010FFFF:


在Bootloader調(diào)試選項(xiàng)(Debugger > Images > Download extra image)中添加對(duì)應(yīng)Application.out文件并配置對(duì)應(yīng)的Offset (0x00110000 - 0x00020000 = 0x000F0000):

在Bootloader工程中下載調(diào)試來驗(yàn)證對(duì)應(yīng)Application是否支持ROPI。
Bootloader跳轉(zhuǎn)到Application的復(fù)位向量表地址0x00110000:


然后成功跳轉(zhuǎn)到Application的入口函數(shù)__iar_program_start:

最后成功跳轉(zhuǎn)到main函數(shù),說明對(duì)應(yīng)Application成功實(shí)現(xiàn)ROPI(因?yàn)锳pplication鏈接到地址區(qū)間0x00020000 ~ 0x0010FFFF,同樣可以在地址區(qū)間0x00110000 ~ 0x001FFFFF正常運(yùn)行):

03注意事項(xiàng)
對(duì)應(yīng)GP和TP寄存器通常來說會(huì)在啟動(dòng)代碼里面初始化:


如果ROPI程序中有需要跳轉(zhuǎn)到其他非ROPI程序中使用絕對(duì)地址運(yùn)行的函數(shù)(比如對(duì)應(yīng)函數(shù)運(yùn)行在RAM的絕對(duì)地址),那么在ROPI程序中需要使用__absolute關(guān)鍵字聲明對(duì)應(yīng)函數(shù):

調(diào)試ROPI程序的時(shí)候,如果ROPI程序?qū)嶋H運(yùn)行地址區(qū)間跟ROPI程序鏈接的地址區(qū)間不一樣的時(shí)候,需要配置對(duì)應(yīng)的Offset(對(duì)應(yīng)Offset的值是程序?qū)嶋H運(yùn)行地址減去程序鏈接的地址)。另外Debug info only選項(xiàng)表示調(diào)試器只加載對(duì)應(yīng)調(diào)試信息,而不下載對(duì)應(yīng)程序。

如果使用Renesas Smart Configurator生成對(duì)應(yīng)的工程,由于Renesas Smart Configurator生成的r_cg_intvector.c文件里面中斷向量表的名字是INT_Vectors(而不是IAR默認(rèn)的中斷向量表的名字),所以需要修改對(duì)應(yīng)的r_cg_intvector.c文件,IAR里面的啟動(dòng)文件cstartup.s和icf文件。
下面以RH850/F1KM-S2為例:
_cg_intvector.c文件:添加對(duì)應(yīng)ROPI模式下的聲明,把對(duì)應(yīng)INT_Vector[]和INT_Vectors_Init[]分別放到EIINTTBL和EIINTTBL.init section當(dāng)中:

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總結(jié)
本文主要以RH850/F1KM-S2為例介紹了如何在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI。
參考文獻(xiàn):
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
+關(guān)注
關(guān)注
147文章
18934瀏覽量
398512 -
嵌入式
+關(guān)注
關(guān)注
5199文章
20454瀏覽量
334250 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
130012 -
IAR
+關(guān)注
關(guān)注
5文章
410瀏覽量
38555
原文標(biāo)題:在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI
文章出處:【微信號(hào):IAR愛亞系統(tǒng),微信公眾號(hào):IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RH850P1M-C芯片或者RH850P系列誰用過,用什么配置軟件啊?
TRACE32支持RH850系列
RH850多核嵌入式目標(biāo)的基于多核模型的開發(fā)
IAR Systems開發(fā)工具3.10版IAR全面支持Renesas RH850
Renesas Flash Programmer V2.04 Flash memory programming software 用戶手冊(cè) RH850, RX64x
Renesas Flash Programmer V2.04 Flash memory programming software 用戶手冊(cè) RH850, RX64x
rh850與r7f7的關(guān)系 如何使用RH850系列MCU進(jìn)行開發(fā)
在IAR Embedded Workbench for Renesas RH850中實(shí)現(xiàn)ROPI
評(píng)論