首页 > 解决方案 > FreeRTOS 应用程序堆栈可用内存随时间减少

问题描述

我有一个在 freeRTOS 上运行的任务,我正在检查这个应用程序中有多少应用程序堆栈未使用。我看到的是,可用堆栈内存在一段时间后会减少并长时间保持在该值。该任务有一个 while(1) 循环,应该使用相同数量的堆栈,但是我不明白为什么在循环的一些迭代之后堆栈会被用完。这是我的任务的样子:

void Task A(void *arg)
{
    Initialize_some_variables;
    while(1)
    {
         print(uxTaskGetStackHighWaterMark( NULL ));
         sem_wait(some_sem);
         xQueueReceive(some_q);
         process_q_data();
         send_response_over_uart();
         print(uxTaskGetStackHighWaterMark( NULL ));
    }
}

我的堆栈应该具有​​与 while 循环的第一次迭代相同的自由字。但是,我看到一段时间后 GetStackHighWaterMark 返回的免费字数减少了,我无法解释这一点。

标签: cstackfreertosmsp432

解决方案


好的,在阅读了 FreeRTOS 的文档后,我现在了解到 uxTaskGetStackHighWaterMark 总是返回自任务开始执行以来剩余的最小堆栈量。因此,这不是给定实例中可用的堆栈数量。这解释了我所看到的。

https://www.freertos.org/uxTaskGetStackHighWaterMark.html


推荐阅读