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

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

3天内不再提示

如何在IAR Embedded Workbench for Arm中调试Cortex-M HardFault

电子工程师 来源:IAR爱亚系统 作者:IAR爱亚系统 2022-08-05 11:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

基于Cortex-M的MCU被广泛应用于各种嵌入式系统中,Cortex-M有很多优点,比如高性能、低功耗、高代码密度、丰富的调试功能、强大的生态系统等。在错误异常处理上,Cortex-M提供了强大的错误异常机制,帮助提升系统的稳健性。

本文主要介绍如何在IAR Embedded Workbench for Arm中调试Cortex-M HardFault,帮助开发人员在开发过程中尽早发现代码中的错误异常、提升开发和调试效率、提高代码质量。

关于 Cortex-M Fault

Cortex-M包含了如下几种Fault:

HardFault: 在异常处理中发生错误导致的Fault,或者是不能被其它异常处理的Fault。

MemManage Fault: 违反内存访问规则导致的Fault。

BusFault: 内存访问过程中总线出错导致的Fault。

UsageFault: 指令执行时出错导致的Fault,包括:

- 未定义的指令

- 非法未对齐访问

- 指令执行时非法状态

- 异常返回错误 下面两个需要额外使能: - 未对齐访问字和半字内存

- 除零操作

其中,HardFault是永远使能的,而MemManage Fault,BusFault和UsageFault默认是没有使能的,对应的Fault发生之后会升级为HardFault。

在IAR Embedded Workbench for Arm中
调试Cortex-M HardFault

下面通过几个示例介绍如何在IAR Embedded Workbench for Arm中调试Cortex-M HardFault。

示例1除零操作导致UsageFault

这个例子中,通过配置CCR寄存器中的DIV_0_TRP来使能除零操作异常。在Call Stack窗口中,可以看到对应发生除零操作的源代码行。在Register窗口中,可以看到 CFSR 寄存器中的DIVBYZERO 置位,表示出现了除零操作异常。在Debug Log和Fault exception viewer窗口中,可以看到详细的错误信息:发生了除零操作异常,导致UsageFault,由于UsageFault没有使能,升级为HardFault,同时给出了除零操作异常发生的PC地址和LR地址。

c67070b2-146b-11ed-ba43-dac502259ad0.png

示例2访问无效地址导致BusFault

这个例子中,地址0x7000000是MCU中的无效地址,当访问无效地址时,会产生BusFault。在Call Stack窗口中,可以看到访问无效地址的源代码行。在Register窗口中,可以看到CFSR 寄存器的的PRECISERR和BFARVALID置位,表示出现了Precise data bus error,同时BFAR中保存了对应访问的无效地址。在Debug Log和Fault exception viewer窗口中,可以看到详细的错误信息:发生了precise data access error,导致BusFault,由于BusFault没有使能,升级为HardFault,同时给出了precise data access error发生时的PC地址和LR地址及对应访问的无效地址。

c69ec2fa-146b-11ed-ba43-dac502259ad0.png

示例3从XN(Execute Never)内存运行程序导致MemManage Fault

在这个例子中,地址0x4000000在Cortex-M中是属Peripheral地址空间,对应的内存属性属于XN(Execute Never):即如果从XN内存运行程序会造成MemManage Fault。在Call Stack窗口中,可以看到对应的源代码行。在Register窗口中,可以看到CFSR 寄存器的的IACCVIOL置位,表示发生了instruction access violation。在Debug Log和Fault exception viewer窗口中,可以看到详细的错误信息:XN访问违反导致MemManage Fault,由于MemManage Fault没有使能,升级为HardFault,同时给出了XN访问发生时的PC地址和LR地址, 通过LR地址可以找到之前函数调用的地方(即导致MemManage Fault的地方)。

c6d05b26-146b-11ed-ba43-dac502259ad0.png

注意事项

1. 为了在调试时出现Fault之后程序能够立即停下来,从而可以更好地分析出现Fault之后的现场,需要使能对应的Vector catch选项(默认是使能的):关于Vector catch的更多信息,请参考ARMv7-M Architecture Reference Manual。

c6e686a8-146b-11ed-ba43-dac502259ad0.png

2. 本文中的示例是基于Cortex-M4,其它Cortex-M的错误异常机制可能会有所不同(比如基于ARMv6-M的Cortex-M0/M0+/M1只有HardFault,没有MemManage Fault,BusFault和UsageFault),对应Register窗口中的信息可能与上面的截图不同,具体取决于所使用的 Cortex-M 类型。但是本文的方法适用于所有Cortex-M的HardFault调试。

总结

本文以Cortex-M4为例,介绍了如何在IAR Embedded Workbench for Arm中调试Cortex-M HardFault。通过分析Call Stack,Register,Debug Log和Fault exception viewer窗口中的信息,可以快速地找到HardFault的原因,尽早发现代码中的错误异常,从而提升开发和调试效率,提高代码质量。

审核编辑 :李倩

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

    关注

    10

    文章

    3015

    浏览量

    91314
  • IAR
    IAR
    +关注

    关注

    5

    文章

    401

    浏览量

    38355
  • Cortex-M
    +关注

    关注

    2

    文章

    234

    浏览量

    30970

原文标题:在IAR Embedded Workbench for Arm中调试Cortex-M HardFault

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Cortex-M产品的特色

    与外部设备进行通信。 指令集:Cortex-M系列处理器支持ARM Thumb指令集,包括16位和32位的Thumb-2指令集,以及可选的DSP指令和浮点单元,提供了高性能的信号处理能力
    发表于 11-26 07:22

    Cortex-M内核的精确延时的方法

    使用 CYCCNT寄存器来测量执行某个任务所花的周期数,这也可以用作时间基准相关的目的(操作系统中统计 CPU使用率可以用到它)。” Cortex-M的DWT它有一个32位的寄存器叫CYCCNT
    发表于 11-21 07:51

    Cortex-M级别的转换

    一、 简述 Cortex-M 里面有特权级别的概念,不同级别可以设定不同的权限,如何转换特权级别基本是本章的内容。 二、操作模式 ARM M 核操作模式有两个: 线程(Thread)模式:在复位时或
    发表于 11-19 07:32

    MCU调试典型问题与解决方法

    ;CFSR(故障状态寄存器)、SCB->HFSR、SCB->MMFAR(内存管理地址)。 使用ARM Cortex-M的故障诊断库(如CmBacktrace)自动定位崩溃代码行。
    发表于 11-17 07:57

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

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

    Cortex-M0+处理器的HardFault错误介绍

    ARM处理器,如果一个程序产生了错误并且被处理器检测到,就会产生错误异常。Cortex-M0+处理器只有一种异常用以处理错误:HardFault
    的头像 发表于 10-14 10:50 2988次阅读
    <b class='flag-5'>Cortex-M</b>0+处理器的<b class='flag-5'>HardFault</b>错误介绍

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

    IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON

    随着嵌入式系统变得越来越智能,对嵌入式处理器的要求也越来越高。为了更好应对汽车、医疗和工业机器人等领域对嵌入式处理器的要求,Arm推出了采用Armv8-R架构的Cortex-R52。Cortex-R52相对之前的处理器引入了很多
    的头像 发表于 06-05 09:57 1560次阅读
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> for <b class='flag-5'>Arm</b>中使用<b class='flag-5'>Arm</b> <b class='flag-5'>Cortex</b>-R52 NEON

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

    在嵌入式软件开发领域,MCU芯片软件的架构设计与内存布局的精细规划对系统性能和稳定性起着关键作用。本文档聚焦于IAR Embedded Workbench环境下,为自研MCU芯片软件提供了一套详尽
    的头像 发表于 04-30 16:38 599次阅读
    基于 <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
    的头像 发表于 04-23 15:45 1223次阅读

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

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

    盘点工程师常用的嵌入式开发工具

    Cortex-M内核的商用IDE,支持调试、编译和仿真,广泛用于STM32等开发。 IAR Embedded Workbench 支持多种
    的头像 发表于 02-07 10:06 3798次阅读

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

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