Cortex-M3 内核HardFault错误调试定位方法

本文介绍了如何修改启动文件startup.s,替换HardFault_Handler以实现异常处理。通过添加hard_fault_handler_c函数,从堆栈和故障寄存器中获取错误信息,帮助诊断和解决内核错误。当发生Hard Fault时,程序会停在while(1)循环,允许分析寄存器值来定位问题。

首先更改startup.s的启动文件

把里面的HardFault_Handler代码段换成下面的代码:

HardFault_Handler\     
    PROC     
    IMPORT  hard_fault_handler_c ;函数申明
    TST LR, #4  ;根据LR.2判断使用的什么堆栈
    ITE EQ     
    MRSEQ R0, MSP ;使用MSP堆栈
    MRSNE R0, PSP ;使用PSP堆栈
    B  hard_fault_handler_c ;执行函数                
ENDP

添加hard_fault_handler_c函数

然后把hard_fault_handler_c函数放在c文件的代码中。代码如下:

void hard_fault_handler_c(unsigned int * hardfault_args) 
{  
    static unsigned int stacked_r0;
    static unsigned int stacked_r1;  
    static unsigned int stacked_r2;  
    static unsigned int stacked_r12;  
    static unsigned int stacked_lr;  
    static unsigned int stacked_pc;  
    static unsigned int stacked_psr;  
    static unsigned int SHCSR;  
    static unsigned char MFSR;  
    static unsigned char BFSR;   
    static unsigned short int UFSR;  
    static unsigned int HFSR;  
    static unsign
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术在路上

帮助需要的人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值