TaskList(FreeRTOS) в Atollic

фотка 1

Почему TaskList FreeRTOS может быть пустой при отладке в среде Atollic True Studio

Главное это понимать где искать причину.

TaskList заполняется командой vTaskList , которую надо искать в коде самого FreeRTOS (как это ни удивительно - не правда ли?).

Но код компилятором включается в программу при выполнении следующих условий :

#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )

Так вот причина может быть в том , что не смотря на то , что в файле FreeRTOSConfig.h:
configUSE_TRACE_FACILITY 1
configUSE_STATS_FORMATTING_FUNCTIONS 1
configSUPPORT_DYNAMIC_ALLOCATION 1

У меня почему-то код ЗАТЕМНЕН (то есть компилятором пропускается) несмотря на Rebuild, Clear Project и т.д.

фотка 2

Мораль такова не верь среде , компилятору и т.д., ищи причину в коде . Хорошо , что среда еще подсветила код, а то сколько еще времени убито было бы не знаю.


Кто вызывает vTaskList()

Странное , но в исходниках FreeRTOS вызовов vTaskList() я не нашел.

Могу предположить , что эта функция вызывается как-то отладчиком GDB в момент остановки программы контроллера (halt).

В vTaskList передается указатель на буфер , vTaskList записывает в буфер все и далее отладчик считывает данные из памяти контроллера , где этот буфер расположен.

TaskList колонка Run time пустая

Либо добавляем volatile для ulTotalRunTime :

PRIVILEGED_DATA volatile static uint32_t ulTotalRunTime = 0UL;

Либо убираем оптимизацию в -O0 :

Properties --> C/C++ Build --> Settings --> Tool Settings --> Optimization --> Optimization Level == -O0.

фотка 3

Примечание : чтобы TaskList заполнился поставьте точку останова , остановите программу где-нибудь отладчиком.

Выстраданный проект выкладываю ниже

Файлы для скачивания

* FreeRTOS_TraceOn_StatOn_TaslList_OK STM32 [zip]
наконецто разобрался со сбором статистики FreeRTOS