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

使用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);
}

相关文章:

  • idea2024使用卡顿
  • golang-linux环境配置
  • LeetCode 1385.两个数组间的距离值
  • 基于深度强化学习的智能机器人路径规划系统:技术与实践
  • 车载软件架构 --- 汽车中央控制单元HPC软件架构方案实例
  • 用于汽车毫米波雷达的四维高分辨率点云图像
  • 【MPC】模型预测控制笔记 (3):无约束输出反馈MPC
  • Seelen UI 是Windows 桌面开发
  • 深度学习进化史:从神经元的诞生到万亿参数的觉醒
  • 电阻篇---上拉电阻的取值
  • Java垃圾回收机制
  • 1.17 模板引擎EJS
  • 如何可视化机器学习模型:从线性回归到神经网络
  • 学习日记-day30-6.15
  • 山东大学软件学院创新项目实训开发日志——第十七周(二)
  • 手写muduo网络库(九):TcpConnection
  • 如何使用configure脚本安装PBS
  • 图形编辑器基于Paper.js教程29:基于图层的所有矢量图元的填充规则实现
  • 组策略关闭 Windows 防火墙指南(企业版/专业版)
  • SpringMVC系列(一)(介绍,简单应用以及路径位置通配符)
  • 建筑设计app推荐/如何优化网络延迟
  • 黑龙江建设培训网站/独立站seo
  • 做网站怎么打空格/百度推广价格
  • 网站的c4d动画是怎么做的/谷歌商店paypal官网下载
  • 营销型网站策划建设/推广百度百科
  • 温州网站建设设计/东莞搜索引擎推广