Функция vTaskList (декларируется подключаемым файлом task.h) позволяет отобразить информацию о потоках.
void vTaskList (char *pcWriteBuffer);
Чтобы эта функция была доступна, в конфигурационном файле FreeRTOSConfig.h должны быть определены в 1 макросы configUSE_TRACE_FACILITY и configUSE_STATS_FORMATTING_FUNCTIONS.
Замечание: эта функция во время своего выполнения запрещает прерывания. Поэтому она не предназначена для использования в рабочем релизе приложения, и её следует использовать только в целях отладки.
Функция vTaskList() вызовет uxTaskGetSystemState(), и затем отформатирует сгенерированные uxTaskGetSystemState() сырые данные в текстовый (ASCII) дамп таблицы, где будет показано текущее состояние каждой задачи, включая самое большое использование своей памяти стека за все время выполнения.
Пример вывода таблицы задач BL602:
test_task X 15 702 3 0x42010690
IDLE R 0 20 5 0x42011690
TCP/IP B 30 3798 4 0x4201a760
Tmr Svc B 31 310 6 0x42011818
hellow B 16 335 1 0x4200f564
bloop_rt S 26 414 7 0x4200fdc8
fw S 30 1055 8 0x42013694
event_loop B 17 754 2 0x4200e500
test_httpc B 10 5142 10 0x4201f850
wifi_mgmr S 28 498 9 0x4201ec48
Буква в первом столбце таблицы обозначает состояние задачи:
B Blocked R Ready D Deleted (ожидает очистки) S Suspended, или Blocked без таймаута X eXecuted, выполняется в настоящий момент
Второй столбец показывает приоритет задачи. Чем значение выше, тем у задачи выше приоритет. Третий столбец показывает, сколько максимум байт задача использовала из своего стека за время своего выполнения. Четвертый столбец показывает идентификатор задачи. Пятый столбец показывает начало буфера стека задачи.
Параметр:
pcWriteBuffer Указатель на буфер, куда будет записана информация генерируемой ASCII-таблицы. Подразумевается, что размер этого буфера достаточен, чтобы разместить в себе сгенерированный табличный отчет. Должно быть достаточным приблизительно по 40 байт на каждую задачу.
Функция vTaskList() предоставляется только для удобства отладки, она не считается частью ядра FreeRTOS. Также см. описание функции vTaskGetRunTimeStats(), которая генерирует информацию статистики по использованию процессорного времени каждой задачи [2].
[Ссылки]
1. vTaskList site:freertos.org. 2. FreeRTOS: как получить информацию о загрузке процессора. |