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

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

Другие вопросы по тегам