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

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

    关注

    6074

    文章

    45340

    浏览量

    663528
  • CAN总线
    +关注

    关注

    145

    文章

    2020

    浏览量

    134689

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用单片机系统时间不准怎么办

    使用单片机系统时间不准,怎么办?具体的是与晶振有关系还是MCU内部有关系,时间一长显示的时间就慢了
    发表于 12-05 07:51

    请问单片机RAM空间不够用了怎么办

    单片机RAM空间不够用了怎么办
    发表于 11-25 08:09

    人脸识别身份核验终端卡顿死机怎么办?看这篇就够了

    不仅导致通行效率骤降,更可能引发用户数据丢失、系统崩溃等次生风险。那么,当遇到人脸识别身份核验终端或人证对比一体出现卡顿死机等情况,应该怎么处理呢?一、人脸识别身份核验终端运行应用就卡顿故障
    的头像 发表于 11-10 10:25 219次阅读
    人脸识别身份核验终端卡顿死机<b class='flag-5'>怎么办</b>?看这篇就够了

    第1章 如何学习单片机

      在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是最重要的。本章节讲到的学习单片机的方法,都是作者学习单片机的无数经验和教训总结出来的瑰宝。通过作者前面的披荆斩棘,开辟道路,可以告诉读者
    的头像 发表于 10-10 10:32 234次阅读

    单片机用什么封装

    单片机封装是将芯片内部电路与外部引脚连接并包裹保护的结构,不仅影响单片机的安装方式、适用场景,还与电路设计的紧凑性、散热性能密切相关。不同封装类型各有特点,适配从简单电路到复杂系统的多样化需求
    的头像 发表于 08-01 13:47 896次阅读

    STM32G474进入Fault3中断没办法设置成周期性触发吗?

    到最低也不行。想请教下,进入Fault3中断没办法设置成周期性触发吗?这种持续触发中断的方式使程序在中断里出不来怎么办呢?即使把Fault3中断优先级设置到最低15而FreeRTOS的基本时钟优先级
    发表于 08-01 07:23

    什么单片机比较耐用

            在工业控制、户外设备、医疗仪器等场景中,单片机的耐用性直接决定设备的稳定运行与维护成本。耐用的单片机通常具备宽温工作范围、强抗干扰能力、稳定的电源适应性和长寿命的硬件设计。深圳市安
    的头像 发表于 07-31 13:48 552次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 476次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 438次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧
    的头像 发表于 07-23 11:47 650次阅读

    手持工业平板电脑使用中遇到故障怎么办?聚徽解码排查与维修方案

    在工业生产与日常作业中,手持工业平板电脑凭借其便携性与强大功能,成为不可或缺的工具。然而,长时间使用或复杂环境因素影响下,设备难免出现故障。掌握系统的故障排查与维修方案,能够有效减少停机时间,保障
    的头像 发表于 06-04 15:52 1500次阅读

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入式系统的核心之一,在现代电子产品中无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4467次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    晶振受到电磁干扰对单片机的影响

    单片机可以正常运行的一个因素就是晶振的稳定性。在工作过程中,晶振可能会受到电磁干扰的影响,导致单片机发生故障,甚至出现死机的情况。
    的头像 发表于 03-20 18:01 996次阅读

    防水试验常见问题解答与故障排除方法

    防水试验是保证产品防水性能的重要工具。但是,在使用过程中,我们可能会遇到一些常见的问题和故障。本文将为您介绍防水试验常见问题的答案和故障
    的头像 发表于 01-06 14:16 726次阅读
    防水试验<b class='flag-5'>机</b>常见问题解答与<b class='flag-5'>故障</b>排除方法

    单片机Debug工具性能对比 单片机调试常用命令

    。以下是对单片机调试工具性能的简要对比以及一些常用的调试命令。 单片机Debug工具性能对比 Keil uVision 性能 :Keil uVision 是一款功能强大的集成开发环境(IDE),支持多种单片机,特别是ARM Co
    的头像 发表于 12-19 09:56 2162次阅读