GENERATE RUN TIME STATS

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%