FREERTOS检测任务栈内存情况

启用堆栈溢出钩子函数

复制代码
// 栈溢出钩子函数
void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {
    (void)xTask; // 避免未使用参数警告
    // 在这里通过串口或其他方式打印出问题的任务名
    // 例如:printf("STACK OVERFLOW in Task: %s\\n", pcTaskName);
    while(1); // 死循环,便于捕获错误
}

启用 uxTaskGetStackHighWaterMark直接看某个任务栈高水位线

这个函数直接输出某个任务栈内存情况方便设置任务栈大小

复制代码
// 获取当前任务的栈高水位线(剩余最小栈空间,以字为单位)
UBaseType_t uxHighWaterMark;
uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL ); // 传入 NULL 表示检查当前任务

// 将结果转换为字节数(在32位系统上通常乘以4)
printf("当前任务栈高水位线(剩余最小栈): %lu 字, 约 %lu 字节\n", 
       (unsigned long)uxHighWaterMark, 
       (unsigned long)uxHighWaterMark * sizeof(portSTACK_TYPE));

当然需要开启相关的宏,版本不一样可能有些不一样我这里加的是以下两个宏

复制代码
#define INCLUDE_uxTaskGetStackHighWaterMark2 1

#define configCHECK_FOR_STACK_OVERFLOW 2
相关推荐
晓蛋1 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
不悔哥1 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
XiHongShi20161 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
牵猫散步的鱼儿1 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy1 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
phltxy1 天前
C 语言中的数据存储:从类型到二进制位
c语言
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
女神下凡1 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9661 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片