嵌入式軟件開發中一般會預留一些MCU資源(ROM,RAM,CPU Load等)以方便項目升級,即使是很成熟的產品,ROM資源也不會100%被使用。在嵌入式軟件構建(Build)過程中,編譯器(Compiler)和鏈接器(Linker)會放置對應的代碼和常量數據到ROM中。沒有被使用的ROM,編譯器和鏈接器會填充0或者不做任何處理(保留ROM擦除之后的值):比如為了半字/字(16-bit Halfword/32-bit Word)對齊,編譯器和鏈接器會填充0到相應的ROM字節 (8-bit Byte);而連續沒有使用的ROM,編譯器和鏈接器不做任何處理(保留ROM擦除之后的值0xFF)。正常情況下,MCU的程序指針(PC)會按照既定程序來運行。但是在有些極端情況下,程序指針有可能發生不可知的變化,從而指向了沒有使用的ROM地址,如果相應地址包含的指令執行一些非期望的操作,產生的影響是未知的(注意:嵌入式系統中未知的影響有可能是非常嚴重的,特別是一些高安全性的嵌入式系統)。為了提高系統的健壯性,通常需要往沒有使用的ROM填充相應的值,這個值可以讓系統快速恢復到可靠的狀態。
本文主要介紹如何在IAR Embedded Workbench中填充沒有使用的ROM來提高系統的健壯性。
填充沒有使用的ROM
在Linker中填充沒有使用的ROM
在IAR Embedded Workbench工程選項(Options)里面Linker選項里面Checksum:勾選“Fill unused code memory”, Fill pattern里面填充相應的值(注意,該值與使用的MCU/CPU相關,具體需要參考對應的CPU指令手冊。原則是該值能夠讓MCU/CPU快速恢復到指定的狀態)。這里以ARM Cortex-M為例,0xFF對應的是未定義的指令(Undefined Instruction),運行改指令會觸發對應的錯誤(Fault)。Start address和End address分別輸入ROM的起始地址和結束地址。

構建(Build)成功之后,查看生成的map文件未使用的范圍部分(Unused ranges):

下載到目標板進行調試。
首先打開Memory窗口查看未使用的ROM范圍部分是不是之前指定填充的值:這里看到都是0xFF。

運行程序一段時間并暫停。打開Register窗口,查看PC值。正常情況下,PC值不會跑到未使用的范圍部分:這里PC值是0x0800_89CA,不在未使用的范圍部分(0x0800_221C ~ 0x0800_2FFF,0x0800_9274 ~ 0x080F_FFFF)。

強制將PC值改變到未使用的范圍部分(0x0800_221C ~ 0x0800_2FFF,0x0800_9274 ~ 0x080F_FFFF),比如0x080F_FFFC:

運行程序。程序會跑到HardFault_Handler,因為執行未定義的指令會觸發錯誤(Fault)。
(注意:HardFault_Handler里面具體的操作需要根據系統的需求來定,但是最終一定要復位讓系統恢復到可靠的狀態。)

可以查看對應的寄存器確認相關的Fault: Undefined instruction usage fault

總結
本文主要分析了沒有使用的ROM的潛在風險并介紹了如何在IAR Embedded Workbench中填充沒有使用的ROM來提高系統的健壯性。
審核編輯:郭婷
-
嵌入式
+關注
關注
5196文章
20404瀏覽量
333052 -
編譯器
+關注
關注
1文章
1672瀏覽量
51407
原文標題:填充沒有使用的ROM來提高系統的健壯性
文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
在IAR Embedded Workbench for Renesas RH850中實現ROPI
瑞薩RL78F2x系列MCU在三種開發環境下的選項字節與安全ID設置方法
漢思新材料:芯片底部填充膠可靠性有哪些檢測要求
CW32 MCU用什么IDE開發?
如何在IAR Embedded Workbench for Arm中開發和調試Infineon MOTIX MCU
使用J-Link Attach NXP S32K3導致對應RAM區域被初始化成0xDEADBEEF
如何在 IAR Embedded Workbench for ARM 開發環境中啟用可配置數據閃存并設置大小?
請問如何在 IAR Embedded Workbench for ARM 開發環境中啟用可配置數據閃存并設置大小?
「芯生態」杰發科技AC7870攜手IAR開發工具鏈,助推汽車電子全棧全域智能化落地
溝槽填充技術介紹
基于 IAR Embedded Workbench 的自研 MCU 芯片軟件函數與變量內存布局優化精控方法
IAR全面支持芯馳科技車規MCU芯片E3650
極海半導體與IAR開展全面合作
芯片底部填充膠填充不飽滿或滲透困難原因分析及解決方案
如何在IAR Embedded Workbench中填充提高系統的健壯性
評論