1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| void hard_fault_handler_c(uint32_t *hardfault_args);
void HardFault_Handler(void) { __asm volatile( "TST LR, #4 \n" "ITE EQ \n" "MRSEQ R0, MSP \n" "MRSNE R0, PSP \n" "B hard_fault_handler_c \n" ); }
void hard_fault_handler_c(uint32_t *hardfault_args) { TaskHandle_t xHandle = xTaskGetCurrentTaskHandle(); const char *pcTaskName = pcTaskGetName(xHandle);
volatile char *pTaskNameMemory = (char *)0x20401000; for (int i = 0; pcTaskName[i] != '\0'; i++) { pTaskNameMemory[i] = pcTaskName[i]; }
uint32_t stacked_r0 = hardfault_args[0]; uint32_t stacked_r1 = hardfault_args[1]; uint32_t stacked_r2 = hardfault_args[2]; uint32_t stacked_r3 = hardfault_args[3]; uint32_t stacked_r12 = hardfault_args[4]; uint32_t stacked_lr = hardfault_args[5]; uint32_t stacked_pc = hardfault_args[6]; uint32_t stacked_psr = hardfault_args[7];
while (1); }
|