网站建设系统 开源,福田网站建设团队,做网站广告有哪些职位,邯郸建设局网站欢迎大家关注我的新博客https://yiyi-ll.github.io/ 1. 重定义HardFault_Handler函数#xff0c;并在函数中调用hard_fault_handler_c函数。
2. 在hard_fault_handler_c函数中#xff0c;调用xTaskGetCurrentTaskHandle获取当前Task的handle#xff0c;并调用pcTaskGetName…欢迎大家关注我的新博客https://yiyi-ll.github.io/ 1. 重定义HardFault_Handler函数并在函数中调用hard_fault_handler_c函数。
2. 在hard_fault_handler_c函数中调用xTaskGetCurrentTaskHandle获取当前Task的handle并调用pcTaskGetName获取当前Task的Name并获取保存的寄存器的值。
// 声明捕获函数
void hard_fault_handler_c(uint32_t *hardfault_args);// 重定义 HardFault_Handler
void HardFault_Handler(void)
{__asm volatile(TST LR, #4 \n // 检查使用 MSP 或 PSP 堆栈指针ITE EQ \nMRSEQ R0, MSP \n // 如果等于 0使用 MSPMRSNE R0, PSP \n // 如果不等于 0使用 PSPB hard_fault_handler_c \n // 跳转到 C 语言处理函数);
}// 捕获堆栈帧信息的 C 语言处理函数
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);
}