HardFault_Handler问题查找方法
STM32出现HardFault_Handler故障的原因主要有两个方面:
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。
出现问题时排查的方法:
发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。
注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
编写问题代码如下:
void StackFlow(void)
{
int a[3],i;
for(i=0; i<10000; i++)
{
a[i]=1;
}
}
void SystemInit(void)
{
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset CFGR register */
RCC->CFGR = 0x00000000;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;
StackFlow();
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
。。。。。。。。。。。。。。
}
DEBUG如下图
SP值为0x20008560,查看堆栈里面的值依次为R0~R3、R12、LR、PC、XPRS, 例如R0(10 27 00 00), 显然堆栈后第21个字节到24字节即为LR,该地址0x08001FFD即为异常前PC将要执行的下一条指令地址(即StackFlow()后面的语句处 RCC->CR &= (uint32_t)0xFFFBFFFF)
另一种方法:
默认的HardFault_Handler处理方法不是B .这样的死循环么?楼主将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿
__asm void wait()
{
BX lr
}
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
wait();
}
HardFault_Handler问题查找方法相关推荐
- Go语言中字符串的查找方法小结
这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr string) ...
- 基于bs4库的HTML内容查找方法
一.信息提取实例 提取HTML中所有的URL链接 思路:1)搜索到所有的<a>标签 2)解析<a>标签格式,提取href后的链接内容 >>> import r ...
- 父类可以调用子类的方法吗_python类的继承、多继承及查找方法顺序
讲解类的继承,先用无__init__()方法的类讲解,会更容易理解 分三部分讲解 1.单继承(无__init__()方法) 继承方式:子类(父类): 方法重写:防止执行父类的方法.不想继承父类的某个方 ...
- spring aop示例_Spring查找方法示例
spring aop示例 当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想 ...
- Spring查找方法示例
当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想要一个依赖bean的新实例 ...
- python list方法说明_对python中list的五种查找方法说明
Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...
- java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程
本发明涉及IT技术领域,特别是指一种基于ClassLoader的自定义类查找方法. 背景技术: 随着信息系统的复杂性日益增大,使用反射机制设计的系统越来越多.根据不同的业务需要通过反射去获得相应的处理 ...
- jQuery学习(十二)—jQuery中对象的查找方法总结
jQuery学习(十二)-jQuery中对象的查找方法总结 一.find方法 作用:在元素1中查找元素2,类似于选择器中的后代选择器 格式:元素1.find(元素2),元素2为CSS选择器或者jQue ...
- python list find函数_对python中list的五种查找方法说明
Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...
最新文章
- nuxt 头部引入js文件 第一次进入页面不加载js文件的解决方法
- RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读
- VTK:可视化之ElevationBandsWithGlyphs
- akka_Akka的字数统计MapReduce
- 百度DuerOS与高通合推手机语音交互解决方案,谁会欢喜谁要愁?
- 猝不及防,iOS9.3测试版已经遭到越狱?
- hadoop使用mapreduce统计词频_Hadoop自带WordCount进行词频统计(mapreduce)
- linux下离线安装gcc详细教程
- 实验六 教务管理数据库的设计
- 最详细的 UART协议 分析在这里!
- 每天学点统计学——指数
- 4.29 笔记+day7作业
- 苹果在研发屏下 Face ID 和 Touch ID该技术可能最终不会商用
- 农场周围的道路c语言编程,[蓝桥杯][2013年第四届真题]农场阳光 (C语言)
- 我们距离实现通用人工智能还有多远?
- 看完小i机器人诉苹果,惊呼这也行?
- 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名...
- c++中“ error C2953: “XXXXx”: 类模板已经定义”的另类方式错误
- 分表添加字段,添加注释,存储过程及游标
- eos bp节点 超级节点搭建
热门文章
- linux 运行 chom,Hadoop安装-单节点/伪分布(2.7.3)
- oracle 会话 lock,相克军_Oracle体系_随堂笔记014-锁 latch,lock
- 控制usb扫码枪_无线也可以很牢靠-世达SATA热熔胶枪评测
- python选择排序从大到小_Python实现选择排序
- java)_Java NIO系列教程(一) Java NIO 概述
- tableau获取筛选器值_认识Tableau中的筛选器
- 简单人物画像_你真的理解用户画像吗?| 船说
- Wordpress基础:精简头部wp_head
- ActiveX控件打包成Cab置于网页中自动下载安装
- 《言简意赅之Linux设备驱动编程》 前言