@@ -8415,7 +8415,7 @@ TickType_t uxTaskResetEventItemValue( void )
84158415 configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter ( const TaskHandle_t xTask )
84168416 {
84178417 TCB_t * pxTCB ;
8418- configRUN_TIME_COUNTER_TYPE ulCurrentRunTimeCounter = 0 , ulTimeSinceLastSwitchedIn = 0 , ulTotalRunTime = 0 ;
8418+ configRUN_TIME_COUNTER_TYPE ulTotalTime = 0 , ulTimeSinceLastSwitchedIn = 0 , ulTaskRunTime = 0 ;
84198419
84208420 traceENTER_ulTaskGetRunTimeCounter ( xTask );
84218421
@@ -8427,25 +8427,25 @@ TickType_t uxTaskResetEventItemValue( void )
84278427 if ( taskTASK_IS_RUNNING ( pxTCB ) == pdTRUE )
84288428 {
84298429 #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8430- portALT_GET_RUN_TIME_COUNTER_VALUE ( ulCurrentRunTimeCounter );
8430+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
84318431 #else
8432- ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE ();
8432+ ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE ();
84338433 #endif
84348434
84358435 #if ( configNUMBER_OF_CORES == 1 )
8436- ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ 0 ];
8436+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ 0 ];
84378437 #else
8438- ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ pxTCB -> xTaskRunState ];
8438+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ pxTCB -> xTaskRunState ];
84398439 #endif
84408440 }
84418441
8442- ulTotalRunTime = pxTCB -> ulRunTimeCounter + ulTimeSinceLastSwitchedIn ;
8442+ ulTaskRunTime = pxTCB -> ulRunTimeCounter + ulTimeSinceLastSwitchedIn ;
84438443 }
84448444 taskEXIT_CRITICAL ();
84458445
8446- traceRETURN_ulTaskGetRunTimeCounter ( ulTotalRunTime );
8446+ traceRETURN_ulTaskGetRunTimeCounter ( ulTaskRunTime );
84478447
8448- return ulTotalRunTime ;
8448+ return ulTaskRunTime ;
84498449 }
84508450
84518451#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
@@ -8456,11 +8456,11 @@ TickType_t uxTaskResetEventItemValue( void )
84568456 configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent ( const TaskHandle_t xTask )
84578457 {
84588458 TCB_t * pxTCB ;
8459- configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn , ulTaskRunTimeCounter ;
8459+ configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn , ulTaskRunTime ;
84608460
84618461 traceENTER_ulTaskGetRunTimePercent ( xTask );
84628462
8463- ulTaskRunTimeCounter = ulTaskGetRunTimeCounter ( xTask );
8463+ ulTaskRunTime = ulTaskGetRunTimeCounter ( xTask );
84648464
84658465 #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
84668466 portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
@@ -8477,7 +8477,7 @@ TickType_t uxTaskResetEventItemValue( void )
84778477 pxTCB = prvGetTCBFromHandle ( xTask );
84788478 configASSERT ( pxTCB != NULL );
84798479
8480- ulReturn = ulTaskRunTimeCounter / ulTotalTime ;
8480+ ulReturn = ulTaskRunTime / ulTotalTime ;
84818481 }
84828482 else
84838483 {
@@ -8496,19 +8496,41 @@ TickType_t uxTaskResetEventItemValue( void )
84968496
84978497 configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter ( void )
84988498 {
8499- configRUN_TIME_COUNTER_TYPE ulReturn = 0 ;
8499+ configRUN_TIME_COUNTER_TYPE ulTotalTime = 0 , ulTimeSinceLastSwitchedIn = 0 , ulIdleTaskRunTime = 0 ;
85008500 BaseType_t i ;
85018501
85028502 traceENTER_ulTaskGetIdleRunTimeCounter ();
85038503
8504- for ( i = 0 ; i < ( BaseType_t ) configNUMBER_OF_CORES ; i ++ )
8504+ taskENTER_CRITICAL ();
85058505 {
8506- ulReturn += xIdleTaskHandles [ i ]-> ulRunTimeCounter ;
8506+ #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8507+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
8508+ #else
8509+ ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE ();
8510+ #endif
8511+
8512+ for ( i = 0 ; i < ( BaseType_t ) configNUMBER_OF_CORES ; i ++ )
8513+ {
8514+ if ( taskTASK_IS_RUNNING ( xIdleTaskHandles [ i ] ) == pdTRUE )
8515+ {
8516+ #if ( configNUMBER_OF_CORES == 1 )
8517+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ 0 ];
8518+ #else
8519+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ xIdleTaskHandles [ i ]-> xTaskRunState ];
8520+ #endif
8521+ }
8522+ else
8523+ {
8524+ ulTimeSinceLastSwitchedIn = 0 ;
8525+ }
8526+ ulIdleTaskRunTime += ( xIdleTaskHandles [ i ]-> ulRunTimeCounter + ulTimeSinceLastSwitchedIn );
8527+ }
85078528 }
8529+ taskEXIT_CRITICAL ();
85088530
8509- traceRETURN_ulTaskGetIdleRunTimeCounter ( ulReturn );
8531+ traceRETURN_ulTaskGetIdleRunTimeCounter ( ulIdleTaskRunTime );
85108532
8511- return ulReturn ;
8533+ return ulIdleTaskRunTime ;
85128534 }
85138535
85148536#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
@@ -8520,7 +8542,6 @@ TickType_t uxTaskResetEventItemValue( void )
85208542 {
85218543 configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn ;
85228544 configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0 ;
8523- BaseType_t i ;
85248545
85258546 traceENTER_ulTaskGetIdleRunTimePercent ();
85268547
@@ -8530,19 +8551,15 @@ TickType_t uxTaskResetEventItemValue( void )
85308551 ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE ();
85318552 #endif
85328553
8533- ulTotalTime = ulTotalTime * configNUMBER_OF_CORES ;
8554+ ulTotalTime *= configNUMBER_OF_CORES ;
85348555
85358556 /* For percentage calculations. */
85368557 ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100 ;
85378558
85388559 /* Avoid divide by zero errors. */
85398560 if ( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
85408561 {
8541- for ( i = 0 ; i < ( BaseType_t ) configNUMBER_OF_CORES ; i ++ )
8542- {
8543- ulRunTimeCounter += xIdleTaskHandles [ i ]-> ulRunTimeCounter ;
8544- }
8545-
8562+ ulRunTimeCounter = ulTaskGetIdleRunTimeCounter ();
85468563 ulReturn = ulRunTimeCounter / ulTotalTime ;
85478564 }
85488565 else
0 commit comments