作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个任务在 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 始终返回自任务开始执行以来剩余的最小堆栈量。因此,它不是给定实例中可用的堆栈量。这解释了我所看到的。
关于c - FreeRTOS 应用程序堆栈可用内存随着时间的推移而减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434050/
我是一名优秀的程序员,十分优秀!