FreeRTOSConfig.h
Включаем функции сбора статистики в файле FreeRTOSConfig.h
#define configUSE_TRACE_FACILITY 1
#define configGENERATE_RUN_TIME_STATS 1
/* Definitions needed when configGENERATE_RUN_TIME_STATS is on */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerTicks
volatile unsigned long ulHighFrequencyTimerTicks = 0 ;
[freertos.c]
void configureTimerForRunTimeStats(void)
{
ulHighFrequencyTimerTicks = 0UL;
}
unsigned long getRunTimeCounterValue(void)
{
return ulHighFrequencyTimerTicks;
return 0;
}
Подключаем таймер
Теперь надо просто увеличивать счетчик ulHighFrequencyTimerTicks++, в каком-нибудь таймере :
MX_TIM12_Init();
if ( HAL_TIM_OC_Start_IT(&htim12 , TIM_CHANNEL_1) !=HAL_OK)
printf("HAL_TIM_OC_Start_IT TIM12\n"); // for freertos stats
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM12)
{
ulHighFrequencyTimerTicks++;
}
}
Далее когда отладчик останавливается на какой-нибудь точке останова и вы находитесь на закладке TaskList ( или открываете закладку TaskList ), отладчик вызывает удаленно vTaskGetRunTimeStats(buf); и потом считывает данные по адресу буфера buf. И заполняется содержание закладки TaskList .
Можно в своем коде программы также вызывать vTaskGetRunTimeStats , когда вам этого захочется примерно в таком стиле :
uint8_t stat[200]={0};
vTaskGetRunTimeStats(stat);
printf("stat : %s\n",stat);
// вывод будет примерно таким
stat : defaultTask 1347 96%
myTask_Kb 0 <1%
IDLE 0 <1%
Task_LCD 0 <1%
myTask_Prn 10 <1%