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

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

3天内不再提示

单片机Fault遇到故障了应该怎么办

Q4MP_gh_c472c21 来源:strongerHuang 作者:strongerHuang 2021-11-08 16:59 次阅读

我们平时的项目,可能会遇到死机的情况,通过在线调试,或者打印消息,可能会发现,怎么进入了 HardFault_Handler 中断呢?

这种“硬故障”是我们常见的一种故障,导致硬故障的原因也有很多。本文针对 Cortex-M3 说说Fault故障相关的内容。

Fault故障种类

Fault故障的种类有很多,拿本文Cortex-M3来说,主要有:

HardFault:硬故障

MemManage:存储器管理故障

BusFault:总线故障

UsageFault:用法故障

7f9cb336-3f77-11ec-9195-dac502259ad0.png

比如,在stm32f10x_it.c源代码中,有这样的中断入口:

void HardFault_Handler(void){ /* Go to infinite loop when Hard Fault exception occurs */ while (1) { }} void MemManage_Handler(void){ /* Go to infinite loop when Memory Manage exception occurs */ while (1) { }} void BusFault_Handler(void){ /* Go to infinite loop when Bus Fault exception occurs */ while (1) { }} void UsageFault_Handler(void){ /* Go to infinite loop when Usage Fault exception occurs */ while (1) { }}

Fault故障描述

每一种Fault故障的产生,都肯定是有一定原因的,如果你代码产生了Fault故障中断,说明代码某些地方引起了Fault故障。

1、HardFault:硬故障

通过截图的描述,你会发现硬故障是一种“不可编程”的故障,因为存储器管理故障、总线故障、用法故障如果不能得到执行,就为上访为硬故障。

7f9cb336-3f77-11ec-9195-dac502259ad0.png

比如:比如在取向量时产生的总线故障也按会硬故障进行处理。所以,你会发现出现故障,很多时候都是硬故障。

硬故障状态寄存器描述:

804ec274-3f77-11ec-9195-dac502259ad0.png

通过状态寄存器,你会发现产生硬故障的原因有以上几种。 2、MemManage:存储器管理故障 存储器管理故障通常与MPU(内存保护单元)有关,之前给大家分享过MPU相关的文章《什么是Cortex-M内核的MPU?》。 通常就是我们说的“内存越界”就会导致存储器管理故障,细说引起该故障的诱因有:

访问了 MPU 设置区域覆盖范围之外的地址

往只读 region 写数据

用户级下访问了只允许在特权级下访问的地址

存储器管理故障状态寄存器:

8084ce00-3f77-11ec-9195-dac502259ad0.png

通过状态寄存器,你会发现引起该故障的一些原因。 3、BusFault:总线故障 总线故障,顾名思义就是对“总线”操作出现问题,导致的故障。 比如:当 AHB 接口上正在传送数据时,如果回复了一个错误信号(error response),则会产生总线故障。 产生总线故障的场合:

取指,通常被称作“预取流产”

数据读/写,通常被称作“数据流产”

触发总线故障的动作:

中断处理起始阶段的堆栈 PUSH 动作。称为“入栈错误”

中断处理收尾阶段的堆栈 POP 动作。称为“出栈错误”

80c00c04-3f77-11ec-9195-dac502259ad0.png

同样,通过总线故障状态寄存器了解产生的原因:

8104de60-3f77-11ec-9195-dac502259ad0.png

4、UsageFault:用法故障 用法故障相对不常见,出现该故障通常是进行了“未对齐访问操作”,其他导致该故障问题很少见。 比如:执行了未定义的指令、除数为0(编译器都会避免)、无效的中断返回等这些情况比较少见。 用法故障状态寄存器:

8190f256-3f77-11ec-9195-dac502259ad0.png

如何应对故障

不知道大家平时有没有对这些进行有效避免?这里简单说几点应对故障的措施:

1、通过故障状态寄存器的值来判定程序错误

在故障中断函数中,读取故障的状态(上面描述了状态寄存器),比如硬故障:

void HardFault_Handler(void){//读取状态寄存器,打印状态寄存器,判断什么原因引起故障printf("状态x信息"); while (1) { }}

如果不想系统处于死机状态,可以在中断里面做软复位。

2、提前对代码进行分析、预判

比如:通过代码静态分析工具,对代码进行分析、查找bug。前不久才分享过一篇文章:推荐几个代码静态分析工具

3、其他诊断方法

之前给大家分享过一篇文章《针对Cortex-M调试诊断 HardFault 的错误追踪库》可以有效诊断本文说的这种“硬故障”。 先写到这里,还有更多更好的方法,欢迎大家留言补充。

责任编辑:haq

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

    关注

    6024

    文章

    44393

    浏览量

    629512
  • CAN总线
    +关注

    关注

    145

    文章

    1904

    浏览量

    130427

原文标题:超实用!单片机Fault故障常见应对办法

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    工控主板发生故障怎么办

    工控主板发生故障怎么办?前几天有个客户问了我这个问题,大部分情况下出现的故障并不可怕,主要是用户粗心大意造成的。那今天小编就来讲解一下工控主板一般会出现故障的主要原因及判断方法:
    的头像 发表于 04-11 18:19 760次阅读

    单片机RAM不够用怎么解决?

    来自一位用户的咨询,麻烦帮忙解答。越详细越好,有图有真相。如有相关的视频、文档也可以辅助说明,谢谢。 单片机RAM不够用怎么办单片机都有RAM,如果我们一下子定义一大堆的变量,使
    发表于 02-02 07:35

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法  在现代社会中,WiFi已经成为了我们生活中必不可少的一部分。然而,有时我们可能会遇到WiFi无法访问互联网的问题,这给我们的学习
    的头像 发表于 01-17 11:17 3.1w次阅读

    ADuC824正弦波转方波时频带要比较宽时怎么办

    正弦波转方波时频带要比较宽时怎么办呢!我用lm393做了一个过零比较器给单片机(aduc824)识别(频率计)但是在低频时监测不到。在小于200hz的时候不可以,到300khz又不行了。不知道是在
    发表于 01-15 06:42

    风机轴磨损怎么办

    电子发烧友网站提供《风机轴磨损怎么办.docx》资料免费下载
    发表于 01-07 11:04 0次下载

    4260纸烘缸轴磨损怎么办

    电子发烧友网站提供《4260纸烘缸轴磨损怎么办.docx》资料免费下载
    发表于 12-18 10:38 0次下载

    pcb钻孔偏孔怎么办

    pcb钻孔偏孔怎么办
    的头像 发表于 11-22 11:10 2809次阅读
    pcb钻孔偏孔<b class='flag-5'>了</b><b class='flag-5'>怎么办</b>?

    单片机与esp8266串口通讯时,用转ttl模块发不了信息怎么解决?

    单片机与esp8266串口通讯时, uart转ttl模块同时接上,txd接单片机的txd(即esp8266的rxd)发现esp8266接收不了串口数据。猜测是单片机的txd引脚阻抗小,把信号弄没了,
    发表于 11-09 08:04

    电机过热怎么办

    电机过热怎么办?WAYON维安PPTC有方案
    的头像 发表于 11-01 15:08 617次阅读
    电机过热<b class='flag-5'>怎么办</b>?

    单片机的电流故障录波系统设计与实现

    电子发烧友网站提供《单片机的电流故障录波系统设计与实现.pdf》资料免费下载
    发表于 10-30 11:17 2次下载
    <b class='flag-5'>单片机</b>的电流<b class='flag-5'>故障</b>录波系统设计与实现

    STC8单片机下载时显示文件超出范围怎么办

    STC8单片机下载时显示文件超出范围怎么办,怎么能把程序下进去
    发表于 10-28 07:04

    单片机的IO口不够用了怎么办?如何扩展单片机的IO口?

    单片机的IO口不够用了怎么办?如何扩展单片机的IO口? 单片机是应用广泛的微处理器,其具有较高的可编程性、灵活性和成本效益等优点,在嵌入式系统中得到了广泛的应用。然而,由于每一个
    的头像 发表于 10-24 11:49 6583次阅读

    51单片机不能识别红外循迹模块发出的的高电平怎么办

    51单片机不能识别红外循迹模块发出的的高电平怎么办
    发表于 10-23 07:02

    51单片机不能识别红外循迹模块发出的的高电平怎么办

    51单片机不能识别红外循迹模块发出的的高电平怎么办
    发表于 10-18 06:09

    单片机“死机”怎么办

    单片机(Microcontroller,MCU) 又称为微控制器或嵌入式控制器,体积虽小,但使用方便,应用范围广泛,在如通讯设备、智能化管理、医疗设备及工业自动化等应用中都能看到它的身影。
    发表于 10-13 11:42 1866次阅读
    <b class='flag-5'>单片机</b>“死机”<b class='flag-5'>了</b>该<b class='flag-5'>怎么办</b>?