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
相关推荐
我叫洋洋5 小时前
C ++ [ hello world ]
c语言·c++·算法
天空'之城6 小时前
C 语言工业级通用组件手写 09:CRC32 数据校验
c语言·嵌入式开发·数据校验·crc32·工业级组件
sramdram10 小时前
基于32位微控制器的FOC汽车水泵方案
单片机·嵌入式硬件·汽车·微控制器·32位微控制器
Scott9999HH10 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
天空'之城11 小时前
C 语言工业级通用组件手写 06:固定块内存池
c语言·嵌入式开发·内存池·底层优化
十月的皮皮12 小时前
stm20260720-从新手 C 到量产 STM32 工程:程序设计推导指南
c语言·开发语言·stm32·stm32cubemx·hal库
开发笔记-阿牛13 小时前
解析一款有意思的产品||CK6159A语音芯片设计的儿童专注力训练机-舒尔特玩具
stm32·单片机·嵌入式硬件·音频
Echo缘13 小时前
嵌入式系统C语言资源分类与内存分布分析
c语言·开发语言
残影飞雪14 小时前
ESP32-C5下载烧录固件失败报错的原因
单片机·嵌入式硬件
搞全栈小苏15 小时前
SIMetrix_simplis8.4安装教程——附安装包
stm32·单片机·嵌入式硬件·电力电子