Свободная память стека приложений 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, уменьшается, и я не могу это объяснить.
1 ответ
Хорошо, после прочтения документации FreeRTOS я теперь понимаю, что uxTaskGetStackHighWaterMark всегда возвращает минимальный объем стека, оставшийся с момента начала выполнения задачи. Таким образом, это не тот объем стека, который доступен в данном экземпляре. Это объясняет, что я вижу.