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来提高系统的健壮性。

审核编辑:郭婷

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

    关注

    5186

    文章

    20146

    浏览量

    328791
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51080

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    芯片底部填充胶可靠有哪些检测要求?芯片底部填充胶(Underfill)在先进封装(如FlipChip、CSP、2.5D/3DIC等)起着至关重要的作用,主要用于缓解焊点因热膨胀系数
    的头像 发表于 11-21 11:26 147次阅读
    汉思新材料:芯片底部<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 7643次阅读
    如<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 4822次阅读
    使用J-Link Attach NXP S32K3导致对应RAM区域被初始化成0xDEADBEEF

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

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

    请问如何在 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 482次阅读
    「芯生态」杰发科技AC7870携手<b class='flag-5'>IAR</b>开发工具链,助推汽车电子全栈全域智能化落地

    沟槽填充技术介绍

    图2.2是现代CMOS 器件剖面的示意图。一般来说,水平方向的尺寸微缩幅度比垂直方向的幅度更大,这将导致沟槽(包含接触孔)的深宽比(aspect ratio)也随之提高,为避免沟槽填充过程中产生空穴
    的头像 发表于 05-21 17:50 961次阅读
    沟槽<b class='flag-5'>填充</b>技术介绍

    基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与变量内存布局优化精控方法

    在嵌入式软件开发领域,MCU芯片软件的架构设计与内存布局的精细规划对系统性能和稳定性起着关键作用。本文档聚焦于IAR Embedded Workbench环境下,为自研MCU芯片软件提
    的头像 发表于 04-30 16:38 588次阅读
    基于 <b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> 的自研 MCU 芯片软件函数与变量内存布局优化精控方法

    IAR全面支持芯驰科技车规MCU芯片E3650

    2025年4月22日,全场景智能车芯引领者芯驰科技与全球嵌入式软件开发解决方案领导者IAR正式宣布,IAR Embedded Workbench for Arm已全面支持芯驰E3650
    的头像 发表于 04-23 15:45 1206次阅读

    极海半导体与IAR开展全面合作

    随着各领域应用技术的不断精进,嵌入式系统开发生态支持变得尤为重要。极海致力于为广大客户提供功能强大、高安全的开发工具,以便完成快速、简单、高质量的开发。IAR Embedded Workbe
    的头像 发表于 04-12 14:13 797次阅读

    如何将项目从IAR迁移到Embedded Studio

    本文描述如何将IAR EWARM项目迁移到SEGGER Embedded Studio(简称SES)
    的头像 发表于 02-25 17:11 1054次阅读
    如何将项目从<b class='flag-5'>IAR</b>迁移到<b class='flag-5'>Embedded</b> Studio

    IAR与紫光同芯合作,全面支持THA6系列汽车芯片

    近日,全球领先的嵌入式系统开发软件解决方案提供商IAR与业内知名的芯片及解决方案提供商紫光同芯携手宣布,最新版本的IAR Embedded Work
    的头像 发表于 12-27 11:46 1595次阅读

    PCB设计填充铜和网格铜有什么区别?

    填充铜(SolidCopper)和网格铜(HatchedCopper)是PCB设计两种不同的铺铜方式,它们在电气性能、热管理、加工工艺和成本方面存在一些区别:1.电气性能:填充铜:提供连续的导电层
    的头像 发表于 12-10 16:45 101次阅读
    PCB设计<b class='flag-5'>中</b><b class='flag-5'>填充</b>铜和网格铜有什么区别?

    PCB设计填充铜和网格铜有什么区别?

    填充铜(SolidCopper)和网格铜(HatchedCopper)是PCB设计两种不同的铺铜方式,它们在电气性能、热管理、加工工艺和成本方面存在一些区别:1.电气性能:填充铜:提供连续的导电层
    的头像 发表于 12-10 11:18 80次阅读
    PCB设计<b class='flag-5'>中</b><b class='flag-5'>填充</b>铜和网格铜有什么区别?