当前位置: 首页 > backend >正文

使用VSCode开发MCU,FreeRTOS进Hard_Fault调试

欢迎大家关注我的新博客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               \n""MRSEQ R0, MSP        \n"   // 如果等于 0,使用 MSP"MRSNE R0, PSP        \n"   // 如果不等于 0,使用 PSP"B 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);
}
http://www.xdnf.cn/news/14426.html

相关文章:

  • JVM——JVM中的扩展之道
  • 基于二进制XOR运算的机器人运动轨迹与对称图像自动生成算法
  • 基于深度学习的智能交通流量预测系统:技术与实践
  • 批量下载图片小工具
  • 【项目实训】【项目博客#07】HarmonySmartCodingSystem系统前端开发技术详解(5.12-6.15)
  • 寄存器的使用
  • Number.toFixed() 与 Math.round() 深度对比解析
  • 【SpringCloud】2.0 服务治理——nacos
  • LangGraph--设计一个给出标准提示词模板的聊天机器人
  • 探索RAGFlow:解锁生成式AI的无限潜能(2/6)
  • 蒸馏微调DeepSeek-R1-Distill-Qwen-7B
  • 大模型笔记3:通过插件增强大模型的能力
  • Iceberg与Hive集成深度
  • 【FreeRTOS-信号量】
  • LLM对话框项目 EventSource封装和MessageServiceClass流式展示封装
  • MFE微前端高级版:Angular + Module Federation + webpack + 路由(Route way)完整示例
  • vue相关爬坑总结
  • [windows工具]OCR多区域识别导出excel工具1.2版本使用教程及注意事项
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • 深度神经网络学习
  • 设计模式-装饰器模式
  • React-router 路由历史的模式和原理
  • AI 神经网略小白学习笔记(一) -- 环境搭建
  • 【1】Redis 缓存穿透原理和解决方案
  • [AAAI Oral] 简单通用的公平分类方法
  • React-router 多类型历史记录栈
  • 《仿盒马》app开发技术分享-- 回收金提现安全锁校验(端云一体)
  • NodeJS中老生代和新生代和垃圾回收机制
  • Arduino入门教程:6、计时与定时
  • 阿帕奇基金会软件授权与公司贡献者许可协议(中英双语版)