FreeRTOS应用程序堆栈的可用内存随时间减少

时间:2018-09-20 22:12:18

标签: c stack freertos msp432

我有一个在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返回的免费字数减少了,我无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

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