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

审核编辑:郭婷

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

    关注

    5068

    文章

    19021

    浏览量

    303326
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49052

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

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

收藏 人收藏

    评论

    相关推荐

    IAR通过多架构认证的静态分析工具加速代码质量自动化

    公司推出经TÜV SÜD认证的C-STAT静态分析工具,适用于最新发布的IAR Embedded Workbench for RISC-V V3.30.2功能安全版。
    的头像 发表于 06-19 15:49 342次阅读

    芯海应用笔记:通用 MCU 基于 IAR 芯片包 IAR9 开发指南

    芯海科技与 IAR Systems 达成合作,IAR Embedded Workbench for Arm 已全面支持芯海科技CS32F103X、CS32F03X、 CS32L010X
    发表于 05-16 11:52

    IAR版本为Embedded Workbench 6.5 Kickstart 1.4 编绎报错怎么解决?

    请教 IAR 这个错误是什么问题 在IAR版本为Embedded Workbench 6.0 Kickstart 1.30 编绎正常没出错 在I
    发表于 05-09 06:36

    “新一代”漏洞扫描管理系统:脆弱管理平台提高自身健壮性

    黑客发起攻击并非盲目,首先要做充分准备,比如找到可利用的系统脆弱,也就是大家经常提起的0 DAY漏洞,或者是已公开但没有采取弥补措施的已知漏洞,然后再利用一些针对的工具,就可以发起破坏
    的头像 发表于 04-16 11:16 290次阅读

    IAR FOR ARM和IAR FOR STM8无法共存怎么解决?

    IAR Embedded Workbench,CD 找了原程序,发现IAR FOR ARM和FOR STM8安装完后,都叫IarIdePm.exe。 安装完后,FOR ARM在
    发表于 04-07 07:39

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

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

    IAR全面支持小华全系芯片,强化工控及汽车MCU生态圈

    来源:IAR IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发 近日,嵌入式开发软件和服务的全球领
    的头像 发表于 03-13 23:02 498次阅读
    <b class='flag-5'>IAR</b>全面支持小华全系芯片,强化工控及汽车MCU生态圈

    IAR已全面支持小华半导体系列芯片,强化工控汽车MCU生态圈

    IAR Embedded Workbench for Arm 已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发。
    的头像 发表于 03-07 11:38 1653次阅读
    <b class='flag-5'>IAR</b>已全面支持小华半导体系列芯片,强化工控汽车MCU生态圈

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

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

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

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

    思瑞浦与IAR建立合作伙伴关系

    思瑞浦与IAR Systems联合宣布,IAR的旗舰产品IAR Embedded Workbench for Arm现已全面支持思瑞浦的TP
    的头像 发表于 01-24 17:33 877次阅读

    思瑞浦与IAR携手共筑嵌入式开发生态

    IAR Embedded Workbench for Arm全面支持3PEAK TPS32混合信号微控制器主流系列产品
    的头像 发表于 01-18 11:35 519次阅读
    思瑞浦与<b class='flag-5'>IAR</b>携手共筑嵌入式开发生态

    思瑞浦与IAR携手共筑嵌入式开发新生态

    2024年1月18日思瑞浦与IAR联合宣布,IAR旗舰产品IAR Embedded Workbench for Arm已全面支持思瑞浦TPS
    的头像 发表于 01-18 11:06 754次阅读

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

    在前面的文章“使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整”中介绍了如何在
    的头像 发表于 01-05 12:33 1457次阅读
    在<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 1452次阅读