0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在IAR Embedded Workbench中填充提高系统的健壮性

IAR爱亚系统 来源:IAR爱亚系统 作者:IAR爱亚系统 2022-11-03 17:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式软件开发中一般会预留一些MCU资源(ROMRAMCPU 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的起始地址和结束地址。

efbdf6b0-5b56-11ed-a3b6-dac502259ad0.png

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

eff18a0c-5b56-11ed-a3b6-dac502259ad0.png

下载到目标板进行调试。

首先打开Memory窗口查看未使用的ROM范围部分是不是之前指定填充的值:这里看到都是0xFF。

f021ded2-5b56-11ed-a3b6-dac502259ad0.png

运行程序一段时间并暂停。打开Register窗口,查看PC值。正常情况下,PC值不会跑到未使用的范围部分:这里PC值是0x0800_89CA,不在未使用的范围部分(0x0800_221C ~ 0x0800_2FFF,0x0800_9274 ~ 0x080F_FFFF)。

f050695a-5b56-11ed-a3b6-dac502259ad0.png

强制将PC值改变到未使用的范围部分(0x0800_221C ~ 0x0800_2FFF,0x0800_9274 ~ 0x080F_FFFF),比如0x080F_FFFC:

f080c5dc-5b56-11ed-a3b6-dac502259ad0.png

运行程序。程序会跑到HardFault_Handler,因为执行未定义的指令会触发错误(Fault)。

(注意:HardFault_Handler里面具体的操作需要根据系统的需求来定,但是最终一定要复位让系统恢复到可靠的状态。)

f09f5b3c-5b56-11ed-a3b6-dac502259ad0.png

可以查看对应的寄存器确认相关的Fault: Undefined instruction usage fault

f0db9520-5b56-11ed-a3b6-dac502259ad0.png

总结

本文主要分析了没有使用的ROM的潜在风险并介绍了如何在IAR Embedded Workbench中填充没有使用的ROM来提高系统的健壮性。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20801

    浏览量

    339120
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52117

原文标题:填充没有使用的ROM来提高系统的健壮性

文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在IAR Embedded Workbench for Arm实现ROPI

    随着汽车智能化程度的提高,集成的ECU(Electronic Control Unit)数量不断增加,OTA(Over-the-Air)技术变得越来越普遍,它允许车辆通过无线网络接收软件更新,从而实现功能升级和性能改进,提高了便利
    的头像 发表于 05-11 10:29 5816次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> for Arm<b class='flag-5'>中</b>实现ROPI

    何在 S32DS 3.6 安装 IAR Eclipse 插件并创建 IAR 项目?

    何在 S32DS 3.6 安装 IAR Eclipse 插件并创建 IAR 项目? There is an article here that explains how to op
    发表于 04-23 07:44

    IAR Embedded Workbench for Renesas RH850实现ROPI

    随着汽车智能化程度的提高,集成的ECU(Electronic Control Unit)数量不断增加,OTA(Over-the-Air)技术变得越来越普遍,它允许车辆通过无线网络接收软件更新,从而实现功能升级和性能改进,提高了便利
    的头像 发表于 01-10 15:25 9584次阅读
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> for Renesas RH850<b class='flag-5'>中</b>实现ROPI

    SiFive车规级RISC-V IP获IAR最新版嵌入式开发工具全面支持,加速汽车电子创新

    随着最新版Embedded Workbench for RISC-V v3.40.2的发布,IAR在延续对E6-A系列支持的基础上,进一步新增了对SiFive Essential™ E7-A
    的头像 发表于 12-16 15:15 564次阅读

    瑞萨RL78F2x系列MCU在三种开发环境下的选项字节与安全ID设置方法

    不同的开发环境,设置方法也各不相同。本文将手把手教你如何在主流的CS+for CC、e2studio和IAR Embedded Workbench
    的头像 发表于 12-11 16:33 5108次阅读
    瑞萨RL78F2x系列MCU在三种开发环境下的选项字节与安全ID设置方法

    汉思新材料:芯片底部填充胶可靠有哪些检测要求

    芯片底部填充胶可靠有哪些检测要求?芯片底部填充胶(Underfill)在先进封装(如FlipChip、CSP、2.5D/3DIC等)起着至关重要的作用,主要用于缓解焊点因热膨胀系数
    的头像 发表于 11-21 11:26 869次阅读
    汉思新材料:芯片底部<b class='flag-5'>填充</b>胶可靠<b class='flag-5'>性</b>有哪些检测要求

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW
    发表于 11-12 07:52

    何在IAR Embedded Workbench for Arm开发和调试Infineon MOTIX MCU

    Infineon MOTIX MCU集成了感应、控制和驱动电机的所有基本功能,支持继电器、半桥和全桥直流和 BLDC 电机应用,为先进的电机控制应用提供全面的解决方案[1]。
    的头像 发表于 11-08 14:24 8624次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> for Arm<b class='flag-5'>中</b>开发和调试Infineon MOTIX MCU

    使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF

    IAR Embedded Workbench for Arm中使用J-Link Attach NXP S32K3的时候,会提示对应RAM区域被初始化成0xDEADBEEF,导致对应RAM区域的数据被“篡改”。
    的头像 发表于 11-03 15:26 5694次阅读
    使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF

    汉思底部填充胶:提升芯片封装可靠的理想选择

    一、底部填充胶的作用与市场价值在电子封装领域,底部填充胶(Underfill)已成为提升芯片可靠不可或缺的关键材料。随着芯片封装技术向高密度、微型化和多功能化演进,汉思新材料凭借其创新的底部
    的头像 发表于 09-05 10:48 3098次阅读
    汉思底部<b class='flag-5'>填充</b>胶:提升芯片封装可靠<b class='flag-5'>性</b>的理想选择

    汉思新材料:底部填充胶可靠不足如开裂脱落原因分析及解决方案

    底部填充胶(Underfill)在电子封装(尤其是倒装芯片、BGA、CSP等)起着至关重要的作用,它通过填充芯片与基板之间的间隙,均匀分布应力,显著提高焊点抵抗热循环和机械冲击的能力
    的头像 发表于 08-29 15:33 2742次阅读
    汉思新材料:底部<b class='flag-5'>填充</b>胶可靠<b class='flag-5'>性</b>不足如开裂脱落原因分析及解决方案

    何在 IAR Embedded Workbench for ARM 开发环境启用可配置数据闪存并设置大小?

    何在 IAR Embedded Workbench for ARM 开发环境启用可配置数据闪存并设置大小?
    发表于 08-26 07:49

    请问如何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?

    何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?
    发表于 08-20 06:29

    请问如何在 IAR Embedded Workbench for ARM 开发环境启用可配置数据闪存并设置大小?

    何在 IAR Embedded Workbench for ARM 开发环境启用可配置数据闪存并设置大小?
    发表于 08-20 06:23

    「芯生态」杰发科技AC7870携手IAR开发工具链,助推汽车电子全栈全域智能化落地

    IAR Embedded Workbench for Arm已全面支持杰发科技AutoChips车规级MCU AC7870,为其提供涵盖开发、调试、优化等一站式服务
    的头像 发表于 07-22 12:06 873次阅读
    「芯生态」杰发科技AC7870携手<b class='flag-5'>IAR</b>开发工具链,助推汽车电子全栈全域智能化落地