当前位置:首页 > 公众号精选 > 21ic电子网
[导读]我们平时的项目,可能会遇到死机的情况,通过在线调试,或者打印消息,可能会发现,怎么进入了HardFault_Handler中断呢?这种“硬故障”是我们常见的一种故障,导致硬故障的原因也有很多。本文针对Cortex-M3说说 Fault 故障相关的内容。Fault故障种类Fault...

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


这种“硬故障”是我们常见的一种故障,导致硬故障的原因也有很多。本文针对 Cortex-M3 说说 Fault 故障相关的内容。
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) { }}
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(编译器都会避免)、无效的中断返回等这些情况比较少见。
用法故障状态寄存器:


如何应对故障


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


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


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


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

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


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


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


3、其他诊断方法


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

来源:strongerHuang版权归原作者所有,如有侵权,请联系删除。

21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

业内消息,昨天问界(AITO)汽车发布题为《关于山西省侯平高速路段交通事故中问界新 M7 Plus 相关技术问题的说明》的长微博。博文表示 AITO 汽车自 4 月 26 日山西省侯平高速路段事故发生后一直配合交警部门开...

关键字: 问界 AITO 华为

近日,字节跳动发布《企业纪律与职业道德委员会通报(2024年2号)》,因涉嫌构成刑事犯罪、违反廉洁诚信制度、违反利益冲突制度、违反信息安全制度四项原因辞退员工61人。近年来,多家互联网公司密集进行内部反腐整顿,包括腾讯、...

关键字: 互联网 字节跳动 辞退 腾讯 百度

业内消息,4月28日特斯拉CEO马斯克闪电访华,次日马斯克在与宁德时代董事长曾毓群会面后已经离开北京。马斯克不到24小时的访问行程硕果累累,最重大的突破是特斯拉在智能驾驶合规性方面获得“放行”,成为首个通过国家相关标准的...

关键字: 特斯拉 自动驾驶 FSD

近日,华为内部发布了一则令人瞩目的人事调整文件,宣布华为终端BG(业务集团)CEO余承东将卸任,转而担任华为终端BG董事长一职。这一变动不仅引起了业界的广泛关注与讨论,也预示着华为在组织架构和战略方向上的一次重大调整。

关键字: 余承东 华为 终端BG CEO

业内重磅消息,近日4家日本电信行业领军企业(DOCOMO、NTT公司、NEC公司以及富士通)联手打造的全球首款高速6G无线设备正式亮相。该创新产品的问世是科技界的一项重大突破,标志着通信技术迈入了全新的时代。

关键字: 日本 6G 无线设备

为抢攻AI PC商机,苹果(Apple)预计7日亮相的新iPad Pro率先搭载自研M4芯片,并挟M4芯片强势登场之势为Mac全系列改头换面,首批M4 Mac估今年底至明年初陆续上线;据悉苹果M4采台积电N3E制程,随苹...

关键字: 台积电 3nm 苹果 M4 芯片

业内消息,近日芯片巨头高通公司发布了2024财年第二财季财报,其中营收为93.89亿美元,同比增长1%;净利润为23.26亿美元,同比增长37%;不按照美国通用会计准则,调整后净利润为27.61亿美元,同比增长14%。

关键字: 高通 财报 AI

5 月 3 日,市场研究机构 Counterpoint 发布了 2024 年第一季度全球智能手机的统计数据。结果显示,2024 年第一季度全球智能手机市场出货量达到 2.969 亿部,同比增长 6%。这一增长主要归功于欧...

关键字: 智能手机

业内消息,此前官宣华为Pura 70 Ultra、华为Pura 70 Pro开启先锋计划,正式在国内开售,近日华为并将目光投向海外,5月2日华为Pura 70系列手机在马来西亚开启预售(即日起至2024年5月24日)。

关键字: 麒麟9010 华为 Pura 70

业内消息,近日两名中国公民因涉嫌向一家中国科技公司 “非法出口” 半导体切割机被起诉,该科技公司早前被美国商务部列入实体名单。

关键字: 半导体设备
关闭
关闭