关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

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

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

嵌入式专栏

1

Fault故障种类

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

  • HardFault:硬故障

  • MemManage:存储器管理故障

  • BusFault:总线故障

  • UsageFault:用法故障

比如,在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){}
}

嵌入式专栏

2

Fault故障描述

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

1.HardFault:硬故障

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

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

硬故障状态寄存器描述:

通过状态寄存器,你会发现产生硬故障的原因有以上几种。

2.MemManage:存储器管理故障

存储器管理故障通常与MPU(内存保护单元)有关,之前给大家分享过MPU相关的文章《什么是Cortex-M内核的MPU?》。

通常就是我们说的“内存越界”就会导致存储器管理故障,细说引起该故障的诱因有:

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

  • 往只读 region 写数据

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

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

通过状态寄存器,你会发现引起该故障的一些原因。

3.BusFault:总线故障

总线故障,顾名思义就是对“总线”操作出现问题,导致的故障。

比如:当 AHB 接口上正在传送数据时,如果回复了一个错误信号(error response),则会产生总线故障。

产生总线故障的场合:

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

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

触发总线故障的动作:

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

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

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

4.UsageFault:用法故障

用法故障相对不常见,出现该故障通常是进行了“未对齐访问操作”,其他导致该故障问题很少见。

比如:执行了未定义的指令、除数为0(编译器都会避免)、无效的中断返回等这些情况比较少见。

用法故障状态寄存器:

嵌入式专栏

3

应对故障

不知道大家平时有没有对这些进行有效避免?

这里简单说几点应对故障的措施:

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

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

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

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

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

比如:通过代码静态分析工具,对代码进行分析、查找bug。

前不久才分享过一篇文章:推荐几个代码静态分析工具

3.其他诊断方法

之前给大家分享过一篇文章《针对Cortex-M调试诊断 HardFault 的错误追踪库》可以有效诊断本文说的这种“硬故障”。

先写到这里,还有更多更好的方法,欢迎大家留言补充。

------------ END ------------

后台回复『Cortex-M3』『单片机』相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

单片机Fault故障常见应对办法相关推荐

  1. dos怎么退出debug_电脑主板坏了怎么办?浅谈主板常见的故障以及应对办法

    随着主板生产工艺水平的提高,我们的主板出现故障的频率越来越小,正因为越来越小,所以人们渐渐的开始不重视主板故障,导致一些自己可以轻松搞定的故障要去花钱请专业人士来搞定,我们要知道许多主板的故障是人为故 ...

  2. 计算机常见故障及排除方法,科学网—计算机常见故障和解决办法 - 李卓哲的博文...

    根据自己研究生这几年对计算机拆了装,装了拆,总结出几条计算机常见的故障问题及其解决办法.纯属个人经验,仅供参考娱乐. 1.计算机开机没有自检声,直接灭掉. 首先要知道自己的电脑是否用了N年,用了七八年 ...

  3. 金蝶专业版过账提示运行时错误5_金蝶专业版过账提示运行时错误5_金蝶KIS专业版常见故障及解决办法...

    金蝶KIS专业版常见故障及解决办法 金蝶KIS专业版常见故障有哪些你知道吗?你对金蝶KIS专业版常见故障了解吗?你知道如何解决金蝶KIS专业版常见故障吗?下面是yjbys小编为大家带来的关于金蝶KIS ...

  4. 得力计算机无法开机,得力碎纸机维修常见故障及解决办法分享

    碎纸机中,得力品牌的我们也是没少见了,得力碎纸机近几年也是得到大家的认可.所有东西用久了都会出现故障,所以今天小编整理了得力碎纸机维修常见故障及解决办法,供大家参考~ 得力碎纸机维修常见故障及解决办法 ...

  5. 电脑技巧:常见软驱故障及解决办法

    转自:微点阅读  https://www.weidianyuedu.com/content/5017746423146.html  常见软驱故障及其解决办法 在计算机的日常使用中,软驱是应用比较频繁的 ...

  6. 计算机常发故障英语,vipkid英语常见问题解决办法

    大家使用vipkid英语学习时,可能会遇到各种问题,下面分享一下vipkid英语常见问题解决办法,希望可以帮到大家. vipkid英语常见问题解决办法 一.浏览器问题 建议使用的浏览器: 谷歌浏览器 ...

  7. 接口级故障的应对方法

    作者:短暂瞬间 链接:https://www.jianshu.com/p/3f02e09a243a 什么是接口级故障? 异地多活方案主要是应对影响大但发生概率较小的系统级故障,而发生概率更高但故障影响 ...

  8. 显示器经典故障以及处理办法

    显示器经典故障以及处理办法 原文: 2004-07-06 14:35:52 作者:未知            在接触电脑的数年中,小编遇到很多次显示器出问题的情况.有的问题是自己可以处理的,而有的问题 ...

  9. 高并发高可用系统的常见应对策略 秒杀等-(阿里)

    对于一个需要处理高并发的系统而言,可以从多个层面去解决这个问题. 1.数据库系统:数据库系统可以采取集群策略以保证某台数据库服务器的宕机不会影响整个系统,并且通过负载均衡策略来降低每一台数据库服务器的 ...

  10. 应用答疑|报警代码故障原因及办法解析——研控MS混合伺服篇

    我们的技术支持工程师在服务过程中发现,用户碰到一些偶发性错误报警时,无法快速反应并解决,只能停机寻求外部援助,常常会耽误生产进度. 一般来说,这类问题可以在产品配套用户手册上找到常规解决办法. 为了进 ...

最新文章

  1. 设计模式之解释器模式、例子分析
  2. java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识
  3. opencv进阶学习笔记4:ROI和泛洪扩充
  4. localStorage的过期时间设置的方法?
  5. qt在窗口的子部件中绘制矩形
  6. 漫画:如何给女朋友解释什么是适配器模式?
  7. python语言中strike_基于Python的XSS测试工具XSStrike使用方法
  8. 【优化算法】多目标萤火虫算法(MOFA)【含Matlab源码 1595期】
  9. 如何换ip ,最简单有效的换ip方法在这里
  10. SpringSecurity授权
  11. 人不成熟的5大特征,成功人士的7个习惯,成长型思维
  12. python错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte
  13. Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported
  14. rabbitMQ修改默认端口
  15. SAP小技巧之 实现SMARTFORM打印中的小计与总计
  16. 论文阅读|训练过程中动态改变训练方案的Dynamic R-CNN
  17. 大学英语综合教程三 Unit 8 课文内容英译中 中英翻译
  18. xampp mysql5.6_xampp (php5.6)免费官方版下载-xampp v5.6.36 win32 X86下载 - QT软件园
  19. html图片合成视频,将视频和图片合成到一个页面
  20. 月亮,还是馅饼(1)

热门文章

  1. HTML 边框和背景设置
  2. java comp_Java EE异常:名称java:comp未在此上下文中绑定
  3. dotnet 使用 Obsolete 特性标记成员过时保持库和框架的兼容性
  4. C#中Obsolete特性
  5. 钓鱼网站+邮件诈骗 实例分析
  6. python 中搞错工作路径的意思导致的相对路径产生bug:[Errno 2] No such file or directory:
  7. hsql导入mysql_关于HSQLDB访问已有数据库文件的操作说明
  8. centos8安装和使用fmmpeg
  9. 小程序(原生) 跳转页面的几种方法
  10. 与孤独世界的博弈——诺贝尔奖得主约翰·纳什的传奇一生