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

审核编辑:郭婷

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

    关注

    4963

    文章

    18161

    浏览量

    286544
  • 编译器
    +关注

    关注

    1

    文章

    1564

    浏览量

    48531

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

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

收藏 人收藏

    评论

    相关推荐

    何在IAR IDE中调试基于Cortex-R52的RZ/T&N MPU的变量实时监控?

    变量实时监视功能是指IAR Embedded Workbench集成开发环境中提供的实时变量监控功能。
    的头像 发表于 03-27 13:35 411次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>IAR</b> IDE中调试基于Cortex-R52的RZ/T&amp;N MPU的变量实时监控?

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系统开发软件解决方案供应商IAR Systems近日宣布,其旗舰产品IAR Embedded Workbench for A
    的头像 发表于 02-22 17:29 487次阅读

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    瑞典乌普萨拉,2024年2月20日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR宣布:推出其旗舰产品IAREmbedded Workbench for Arm功能安全版的最新版本9.50.3。
    的头像 发表于 02-21 13:47 308次阅读

    IAR Embedded Workbench中计算多个地址区间的Checksum

    在前面的文章“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性”中介绍了如何在IAR
    的头像 发表于 01-05 12:33 519次阅读
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中计算多个地址区间的Checksum

    IAR全面支持恩智浦半导体全新电机控制芯片S32M2

    IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列,可加速软件定义汽车的车身和舒适性应用的开发
    的头像 发表于 11-27 09:27 547次阅读

    何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码

    在“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性”一文中,介绍了如何在IAR
    的头像 发表于 10-27 11:49 786次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中配置生成对应代码区域的CRC校验码

    适用于AVR单片机的IAR embedded Workbench入门指南

    电子发烧友网站提供《适用于AVR单片机的IAR embedded Workbench入门指南.pdf》资料免费下载
    发表于 09-20 10:08 6次下载
    适用于AVR单片机的<b class='flag-5'>IAR</b> <b class='flag-5'>embedded</b> <b class='flag-5'>Workbench</b>入门指南

    YRDKRL78G13 快速入门指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入门指南 (IAR Embedded Workbench) Rev.1.01
    发表于 08-10 18:31 0次下载
    YRDKRL78G13 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    YRDKRX62N 快速入门指南(IAR Embedded Workbench)

    YRDKRX62N 快速入门指南 (IAR Embedded Workbench)
    发表于 08-04 18:30 0次下载
    YRDKRX62N 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    IAR发布最新IAR Embedded Workbench for Arm v9.40版本

      嵌入式软件和服务的全球领导者IAR发布了备受欢迎的IAR Embedded Workbench for Arm v9.40版本,最新版本引入了针对代码安全的增强功能:添加了针对Ar
    的头像 发表于 06-16 09:57 1671次阅读

    IAR Embedded Workbench中进行ARM+RISC-V多核调试

    在之前的文章,我们介绍了如何在IAR Embedded Workbench for Arm中进行多核调试,其中所有的CPU内核都是基于AR
    发表于 06-14 16:55

    IAR Embedded Workbench中进行ARM+RISC-V多核调试

    在之前的文章中,我们介绍了如何在IAR Embedded Workbench for Arm中进行多核调试,其中所有的CPU内核都是基于ARM架构。近些年来,随着RISC-V的兴起,不
    发表于 06-13 17:38 579次阅读
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中进行ARM+RISC-V多核调试

    IAR Embedded Workbench中的一些相关特性

    进行测试验证。为了能够升级对应MCU里面包含的Application,越来越多的的嵌入式产品会包含Bootloader进行Application升级:修改之前的Bug和添加新的功能实现。 本文主要介绍IAR Embedded Workb
    的头像 发表于 05-26 10:24 2683次阅读
    <b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中的一些相关特性

    YRDKRL78G13 快速入门指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入门指南 (IAR Embedded Workbench) Rev.1.01
    发表于 04-13 18:49 0次下载
    YRDKRL78G13 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    YRDKRX62N 快速入门指南(IAR Embedded Workbench)

    YRDKRX62N 快速入门指南 (IAR Embedded Workbench)
    发表于 04-12 19:14 0次下载
    YRDKRX62N 快速入门指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)