C语言 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返回的免费字数减少了,我无法解释这一点。

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

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

相关内容

最新更新