Свободная память стека приложений FreeRTOS уменьшается со временем - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть задача, работающая на 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 голосов
/ 21 сентября 2018

Хорошо, после прочтения документации FreeRTOS я теперь понимаю, что uxTaskGetStackHighWaterMark всегда возвращает минимальный объем стека, оставшийся с момента начала выполнения задачи.Таким образом, это не тот объем стека, который доступен в данном экземпляре.Это объясняет, что я вижу.

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

...