出现HardFault_Handler故障的原因有两个方面: 内存溢出或者堆栈溢出
首先需要找到出现故障的地方
1.在main.c下自定义hard_fault_handler_c函数
void hard_fault_handler_c(uint32_t* hardfault_args)
{
static unsigned int stacked_lr;
static unsigned int stacked_pc;
stacked_lr = ((unsigned long) hardfault_args[5]);
stacked_pc = ((unsigned long) hardfault_args[6]);
__breakpoint(0);
while(1);
}
2.把原先HardFault_Handler注释 重新定义
HardFault_Handler\
PROC
IMPORT hard_fault_handler_c
TST LR, #4
ITE EQ
MRSEQ R0, MSP
MRSNE R0, PSP
B hard_fault_handler_c
ENDP
- 修改后 下次故障就会出现在定义的函数中
4.定位故障处
在Debug状态下 在Disassembly窗口里右键选择Show Diassembly at Address
输入stacked_lr,stacked_pc存下的变量地址去定位到故障处