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
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)