Hi
I am running freeRTOS v7.6.0 on an STM32F4 discovery board. I am currently running 14 tasks and im curious to find out some information about which tasks are taking up the most CPU usage and how much head room i have left. I attempted to use uxTaskGetSystemState function and my idle task(which i am assuming will run when the processor is free) is returning a runtime of 0. The runtime of all the other tasks adds up to about 20% of the total runtime(not sure whats happening the other 80%). I have configured an external clock running at 100 times the speed of the rtos tick. I am not sure what i am doing wrong as i am expecting to IDLE task to be running for the majority of the time.
External Timer Configuration:
::c
//in main.c
void TIM5_IRQHandler(void)
{
/* Check if interrupt has occured
/
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
{
/ Clear interrupt pending bit */
TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
ulHighFrequencyTimerTicks++; //counter incrementing at 100kHz
}
}
//in FreeRTOSConfig.h
extern volatile unsigned long ulHighFrequencyTimerTicks;
/* ulHighFrequencyTimerTicks is already being incremented at 20KHz. Just set
its value back to 0. */
define configUSE
STATSFORMATTING
FUNCTIONS 1
define portCONFIGURETIMER
FORRUN
TIMESTATS() ( ulHighFrequencyTimerTicks = 0UL )
define portGET
RUNTIME
COUNTERVALUE() ulHighFrequencyTimerTicks
Configuration of task where function call is made:
void vMonitorTask(void *pvParameters) {
signed char stats[ 1024];
xTaskStatusType *pxTaskStatusArray;
volatile unsigned portBASE_TYPE uxArraySize;
unsigned long ulTotalRunTime;
for (;;) {
// Take a snapshot of the number of tasks in case it changes while this function is executing.
uxArraySize = uxTaskGetNumberOfTasks(); //uxCurrentNumberOfTasks();
WWDG_SetCounter(127);
// Allocate a xTaskStatusType structure for each task. An array could be allocated statically at compile time.
pxTaskStatusArray = pvPortMalloc( (uxTaskGetNumberOfTasks()) * (sizeof( xTaskStatusType )) );
if( pxTaskStatusArray != NULL )
{
// Generate raw status information about each task.
uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalRunTime );
WWDG_SetCounter(127);
}
xTaskStatusType test = pxTaskStatusArray[0];
}
}
Thanks in advance 🙂