Почему 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 и т.д.
Мораль такова не верь среде , компилятору и т.д., ищи причину в коде . Хорошо , что среда еще подсветила код, а то сколько еще времени убито было бы не знаю.
Кто вызывает 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.
Примечание : чтобы TaskList заполнился поставьте точку останова , остановите программу где-нибудь отладчиком.
Выстраданный проект выкладываю ниже
Файлы для скачивания
*
наконецто разобрался со сбором статистики FreeRTOS