当前位置: 首页 > 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);
}
http://www.dtcms.com/a/251637.html

相关文章:

  • 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系列(一)(介绍,简单应用以及路径位置通配符)
  • 机器学习实验报告5-K-means 算法
  • Linux--存储系统探秘:从块设备到inode
  • 影视剧学经典系列-梁祝-陶渊明《感士不遇赋并序》
  • Appium+python自动化(二十三)- Monkeyrunner与Monkey
  • React forwardRef 与 useImperativeHandle 深度解析
  • selenium点击元素出现的obscure问题
  • 设计模式精讲 Day 2:工厂方法模式(Factory Method Pattern)
  • 什么是敏捷中的迭代(Iteration)和 Sprint?
  • 计算机硬件——主板
  • 【旧题新解】第 9 集 带余除法