Как я могу получить использование памяти процессом в freeRTOS - PullRequest
0 голосов
/ 27 февраля 2019

Как мы все знаем, мы можем получить оперативную память, используемую в настоящее время процессом в Linux, используя такие команды, как ps, top и vmstat или читая псевдофайловую систему / proc.Но как я могу получить ту же информацию в freeRTOS, где мы не могли использовать команды и не существует файловой системы.

1 Ответ

0 голосов
/ 07 марта 2019

Во-первых, в RTOS нет контекста процесса.Во FreeRTOS есть задачи (которые аналогичны потокам в Linux) и основной контекст, который снова теряется при запуске Scheduler .Память стека, занятая каждой задачей, настраивается клиентом при создании задачи.

Однако после запуска системы вы можете запросить, достигает ли стек максимального значения, используя следующий API.

uxTaskGetStackHighWaterMardk(TaskHandle_t task)

Пожалуйста, обратитесь https://www.freertos.org/uxTaskGetStackHighWaterMark.html

Помните, что INCLUDE_uxTaskGetStackHighWaterMark должно быть определено для 1, чтобы использовать эту функцию.

Для кучи памяти я предполагаю, что вы 'использовать одну из стратегий выделения кучи FreeRTOS (heap_1, heap_2 и т. д.).В этом случае, если вы глобально переопределили свой malloc/free/new/new[]/delete/delete[] для использования FreeRTOS pvPortMalloc, есть способ зарегистрировать функцию перехвата, которая вызывается, когда система исчерпывает кучу.

См. https://www.freertos.org/a00016.html

В то же время можно получить статус времени выполнения из планировщика с помощью следующего API.

void vTaskGetRunTimeStats( char *pcWriteBuffer );

Конечно, это приведет к приостановке / приостановкепланировщик часто, так что не будет реальным решением для вашего производственного кода, но все равно будет хорошим средством отладки.

См. https://www.freertos.org/rtos-run-time-stats.html.

...