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
相关推荐
LCG元7 分钟前
STM32实战:基于STM32CubeMX的串口通信与DMA传输优化
stm32·单片机·嵌入式硬件
zly88653728 分钟前
windsurf rules与skill的使用
linux·c语言·开发语言·驱动开发
莎士比亚的文学花园16 分钟前
硬件入门——51单片机
单片机·嵌入式硬件·51单片机
Lzh编程小栈25 分钟前
数据结构与算法——单链表超详解(C语言完整实现 + 面试高频题)
c语言·开发语言·面试
聆风吟º31 分钟前
【C标准库】C语言memset函数详解:从原理到实战避坑
c语言·开发语言·库函数·memset
Book思议-1 小时前
【数据结构实战】双向链表:删除节点
c语言·数据结构·算法·链表
LCMICRO-133108477464 小时前
长芯微LD9689完全P2P替代AD9689,是一款双通道、14位、2.0 GSPS/2.6 GSPS模数转换器(ADC)
网络·单片机·嵌入式硬件·网络协议·fpga开发·硬件工程·高速adc
爱编码的小八嘎10 小时前
C语言完美演绎4-7
c语言
炘爚11 小时前
C语言(文件操作)
c语言·开发语言
W.D.小糊涂12 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库