首先更改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

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

被折叠的 条评论
为什么被折叠?



