скрытое меню

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 и т.д.

фотка 1

Так вот решилась проблема изменением значения только здесь :

#ifndef configUSE_STATS_FORMATTING_FUNCTIONS
	#define configUSE_STATS_FORMATTING_FUNCTIONS 0  // меняем на 1
#endif

Хотя как это объяснить я так и не смог для себя...

Ведь #include "FreeRTOSConfig.h" идет раньше чем ifndef configUSE_STATS_FORMATTING_FUNCTIONS.

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

Можно добавить , что как ни странно в начальный момент запуска при отладке TaskList заполнялся на некоторое время, но в начале функции main TaskList очищался и никакая инфа далее там не появлялась. То же еще странность.

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

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

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

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

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

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

PRIVILEGED_DATA volatile static uint32_t ulTotalRunTime = 0UL;

Либо убираем оптимизацию в -O0 :
Properties --> C/C++ Build --> Settings --> Tool Settings --> Optimization --> Optimization Level == -O0.

фотка 1

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

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

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

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