Hard Fault 异常错误堆栈分析
origin:http://www.51hei.com/bbs/dpj-39846-1.html
看到有朋友遇到Hard Fault 异常错误,特地找到一篇飞思卡尔工程师写的一片经验帖,定位Hard Fault 异常。
Kinetis MCU 采用 Cortex-M4 的内核,该内核的 Fault 异常可以捕获非法的内存访问和非法的编程行为。Fault 异常能够检测到以下几类非法行为:
![](http://c.51hei.com/d/forum/201510/29/172227v78t177h5k3hhchz.jpg)
![](http://c.51hei.com/d/forum/201510/29/172227izmyyjy6g5u0c02n.jpg)
![](http://c.51hei.com/d/forum/201510/29/172228wn43xsvgvp4pp8lv.jpg)
![](http://c.51hei.com/d/forum/201510/29/172229uy7yzyzf3uonrson.jpg)
- // hard fault handler in C,
- // with stack frame location as input parameter
- void hard_fault_handler_c (unsigned int * hardfault_args)
- {
- unsigned int stacked_r0;
- unsigned int stacked_r1;
- unsigned int stacked_r2;
- unsigned int stacked_r3;
- unsigned int stacked_r12;
- unsigned int stacked_lr;
- unsigned int stacked_pc;
- unsigned int stacked_psr;
- stacked_r0 = ((unsigned long)hardfault_args[0]);
- stacked_r1 = ((unsigned long)hardfault_args[1]);
- stacked_r2 = ((unsigned long)hardfault_args[2]);
- stacked_r3 = ((unsigned long)hardfault_args[3]);
- stacked_r12 = ((unsigned long)hardfault_args[4]);
- stacked_lr = ((unsigned long)hardfault_args[5]);
- stacked_pc = ((unsigned long)hardfault_args[6]);
- stacked_psr = ((unsigned long) hardfault_args[7]);
- printf ("\n\n[Hard faulthandler - all numbers in hex]\n");
- printf ("R0 = %x\n",stacked_r0);
- printf ("R1 = %x\n",stacked_r1);
- printf ("R2 = %x\n",stacked_r2);
- printf ("R3 = %x\n",stacked_r3);
- printf ("R12 = %x\n",stacked_r12);
- printf ("LR [R14] = %x subroutine call return address\n",stacked_lr);
- printf ("PC [R15] = %x program counter\n", stacked_pc);
- printf ("PSR = %x\n",stacked_psr);
- /******************* Add yourdebug trace here ***********************/
- _int_kernel_isr();
- }
- /* hard fault interrupt handler */
- void _int_hardfault_isr( )
- {
- __asm("TST LR, #4");
- __asm("ITE EQ");
- __asm("MRSEQ R0,MSP");
- __asm("MRSNE R0,PSP");
- __asm("Bhard_fault_handler_c");
- }
复制代码
-
-
fault_isr.c.zip
1.42 KB, 下载次数: 7, 下载积分: 黑币 -5
-
-
vectors.c.zip
3.43 KB, 下载次数: 4, 下载积分: 黑币 -5
-
-
如何定位Kinetis MCU Hard Fault异常.pdf
362.58 KB, 下载次数: 15, 下载积分: 黑币 -5
Hard Fault 异常错误堆栈分析相关推荐
- python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件
假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.tx ...
- python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码
本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...
- Segmentation fault段错误出现原因分析及解决方法笔记
Segmentation fault段错误出现原因分析及解决方法 1.局部变量的大小过大,超过栈分配的空间导致段错误,如double a[500][500], 解决方法:大数据不要放在栈区中,可以考虑 ...
- logback配置控制打印台异常信息_logback异常输出详细信息(调用堆栈)分析
Logback背景 Logback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的. logback由三个部分组成,logback-core, logback-classic, lo ...
- php tp6 错误接管分析,ThinkPHP5 异常接管
在实际应用中,对于异常错误处理,我们往往需要进行错误的友好处理,并且需要记录错误(越为详细越好),一方面提高了用户的体验,另一方面也可以帮助开发人员更好的调试. 首先我们在项目中自定义异常处理类: 在 ...
- Linux平台Segmentation fault(段错误)调试方法
1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况. 2. 段错误的原因 段错 ...
- 段错误原因分析和查找
转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...
- 功能安全之故障(fault),错误(error),失效(failure)
功能安全中的有些概念比较绕,比如故障(fault),错误(error),失效(failure),本文就这三个概念进行下探讨. 1. 故障 功能安全中定义的故障是指可引起要素或相关项失效的异常情况. 故 ...
- java堆栈分析工具_JVM内存分析工具使用
Java 内存堆栈分析.我们在分析现网问题时候,经常会遇到一些问题从日志上无法分析的疑难问题.在我们举足无措的时候,我们可以分析一些JVM内存,来看看问题出在哪里了. 我们经常用到的一工具: 分析栈内 ...
最新文章
- 自动布局按钮排列平均分布
- hibernate 集合类(Collections)映射
- 第二周 第七节 列表的使用
- Linux下计划任务:crontab 命令的权限说明
- python发邮件有什么意思_python发邮件要装什么
- 系统分析与设计结对项目———Wordcount
- mate 树莓派4b安装ubuntu_树莓派4B安装安装Ubuntu Mate 16.04
- 数学建模(5)---煤矸石堆积问题
- python 3.5 format_python 3.5学习笔记(第四章)
- 利用python并发模块进行网站的状态检测
- mapjoin的使用方法以及注意事项
- I2S协议及在verilog中实现
- 如何设置路由器wifi的用户黑名单?(使别人不能连接你家WIFI)
- Windows11跳过联网激活方法
- shiro.crypto.CryptoException: Unable to correctly extract the Initialization Vector or ciphertext
- Python实现久坐提醒小助手程序
- oracle11配置远程登录,oracle11g远程登录设置方法
- 【CSS】 画优惠券锯齿边框样式
- QT 自定义加载等待(Loading)提示框
- linux常用命令||