richarddamon wrote on Monday, May 20, 2019:
I work a freertos_tacks_c_additions.h header file that does that shown below:
Call vTaskClearUsage() to reset all the execution time stats.
Hasn’t been thoughouly tested, but seems to work for me.
(FreeRTOSAdditions.h is a header file to provide the prototype for vTaskClearUsage() so other files can call this.)
#ifndef FREERTOS_FREERTOSPP_FREERTOS_TASKS_C_ADDITIONS_H
#define FREERTOS_FREERTOSPP_FREERTOS_TASKS_C_ADDITIONS_H
#include <FreeRTOSAdditions.h>
void vTaskClearUsageSingleList(List_t *pxList)
{
configLIST_VOLATILE TCB_t *pxNextTCB, *pxFirstTCB;
if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 ) {
listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList );
/* Clear Usage for each task that is referenced from
pxList. See the definition of TaskStatus_t in task.h for the
meaning of each TaskStatus_t structure member. */
do {
listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList );
pxNextTCB->ulRunTimeCounter = 0;
} while( pxNextTCB != pxFirstTCB );
}
}
void vTaskClearUsage() {
UBaseType_t uxQueue = configMAX_PRIORITIES;
vTaskSuspendAll();
/* Clear runtime counter for each task in the Ready State */
do {
uxQueue--;
vTaskClearUsageSingleList(&( pxReadyTasksLists[ uxQueue ] ));
} while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
/* Clear runtime counter for each task in the Blocked state. */
vTaskClearUsageSingleList(( List_t * ) pxDelayedTaskList);
vTaskClearUsageSingleList(( List_t * ) pxOverflowDelayedTaskList);
#if( INCLUDE_vTaskDelete == 1 )
/* Clear runtime counter for each task that has been deleted but not yet cleaned up. */
vTaskClearUsageSingleList(&xTasksWaitingTermination);
#endif
#if ( INCLUDE_vTaskSuspend == 1 )
/* Clear runtime counter for each task in the Suspended state. */
vTaskClearUsageSingleList(&xSuspendedTaskList);
#endif
ulTaskSwitchedInTime = 0;
ulTotalRunTime = 0;
vConfigureTimerForRunTimeStats();
xTaskResumeAll();
}
#endif /* FREERTOS_FREERTOSPP_FREERTOS_TASKS_C_ADDITIONS_H_ */