|
|
|
@ -47,3 +47,28 @@ void delay_us(int nus) |
|
|
|
}; |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
void hard_fault_handler_c(unsigned int *hardfault_args) |
|
|
|
{ |
|
|
|
unsigned int stacked_r0 = hardfault_args[0]; |
|
|
|
unsigned int stacked_r1 = hardfault_args[1]; |
|
|
|
unsigned int stacked_r2 = hardfault_args[2]; |
|
|
|
unsigned int stacked_r3 = hardfault_args[3]; |
|
|
|
unsigned int stacked_r12 = hardfault_args[4]; |
|
|
|
unsigned int stacked_lr = hardfault_args[5]; // 链接寄存器
|
|
|
|
unsigned int stacked_pc = hardfault_args[6]; // 程序计数器
|
|
|
|
unsigned int stacked_psr = hardfault_args[7]; // 状态寄存器
|
|
|
|
|
|
|
|
// 打印寄存器现场
|
|
|
|
log_a("====== HardFault Detected ======\r\n"); |
|
|
|
log_a("R0 = 0x%08X, R1 = 0x%08X\r\n", stacked_r0, stacked_r1); |
|
|
|
log_a("R2 = 0x%08X, R3 = 0x%08X\r\n", stacked_r2, stacked_r3); |
|
|
|
log_a("R12= 0x%08X, LR = 0x%08X\r\n", stacked_r12, stacked_lr); |
|
|
|
log_a("PC = 0x%08X, PSR= 0x%08X\r\n", stacked_pc, stacked_psr); |
|
|
|
|
|
|
|
// 打印故障状态寄存器
|
|
|
|
log_a("HFSR = 0x%08X\r\n", SCB->HFSR); |
|
|
|
log_a("CFSR = 0x%08X\r\n", SCB->CFSR); |
|
|
|
log_a("BFAR = 0x%08X\r\n", SCB->BFAR); |
|
|
|
log_a("MMFAR= 0x%08X\r\n", SCB->MMFAR); |
|
|
|
} |
|
|
|
|