@@ -8411,15 +8411,36 @@ TickType_t uxTaskResetEventItemValue( void )
8411
8411
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter ( const TaskHandle_t xTask )
8412
8412
{
8413
8413
TCB_t * pxTCB ;
8414
+ configRUN_TIME_COUNTER_TYPE ulCurrentRunTimeCounter = 0 , ulTimeSinceLastSwitchedIn = 0 , ulTotalRunTime = 0 ;
8414
8415
8415
8416
traceENTER_ulTaskGetRunTimeCounter ( xTask );
8416
8417
8417
8418
pxTCB = prvGetTCBFromHandle ( xTask );
8418
8419
configASSERT ( pxTCB != NULL );
8419
8420
8420
- traceRETURN_ulTaskGetRunTimeCounter ( pxTCB -> ulRunTimeCounter );
8421
+ taskENTER_CRITICAL ();
8422
+ {
8423
+ if ( taskTASK_IS_RUNNING ( pxTCB ) == pdTRUE )
8424
+ {
8425
+ #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8426
+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulCurrentRunTimeCounter );
8427
+ #else
8428
+ ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE ();
8429
+ #endif
8421
8430
8422
- return pxTCB -> ulRunTimeCounter ;
8431
+ #if ( configNUMBER_OF_CORES == 1 )
8432
+ ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ 0 ];
8433
+ #else
8434
+ ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ pxTCB -> xTaskRunState ];
8435
+ #endif
8436
+ }
8437
+ ulTotalRunTime = pxTCB -> ulRunTimeCounter + ulTimeSinceLastSwitchedIn ;
8438
+ }
8439
+ taskEXIT_CRITICAL ();
8440
+
8441
+ traceRETURN_ulTaskGetRunTimeCounter ( ulTotalRunTime );
8442
+
8443
+ return ulTotalRunTime ;
8423
8444
}
8424
8445
8425
8446
#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
@@ -8430,11 +8451,17 @@ TickType_t uxTaskResetEventItemValue( void )
8430
8451
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent ( const TaskHandle_t xTask )
8431
8452
{
8432
8453
TCB_t * pxTCB ;
8433
- configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn ;
8454
+ configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn , ulTaskRunTimeCounter ;
8434
8455
8435
8456
traceENTER_ulTaskGetRunTimePercent ( xTask );
8436
8457
8437
- ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE ();
8458
+ ulTaskRunTimeCounter = ulTaskGetRunTimeCounter ( xTask );
8459
+
8460
+ #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8461
+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
8462
+ #else
8463
+ ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE ();
8464
+ #endif
8438
8465
8439
8466
/* For percentage calculations. */
8440
8467
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100 ;
@@ -8445,7 +8472,7 @@ TickType_t uxTaskResetEventItemValue( void )
8445
8472
pxTCB = prvGetTCBFromHandle ( xTask );
8446
8473
configASSERT ( pxTCB != NULL );
8447
8474
8448
- ulReturn = pxTCB -> ulRunTimeCounter / ulTotalTime ;
8475
+ ulReturn = ulTaskRunTimeCounter / ulTotalTime ;
8449
8476
}
8450
8477
else
8451
8478
{
@@ -8492,7 +8519,13 @@ TickType_t uxTaskResetEventItemValue( void )
8492
8519
8493
8520
traceENTER_ulTaskGetIdleRunTimePercent ();
8494
8521
8495
- ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE () * configNUMBER_OF_CORES ;
8522
+ #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8523
+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
8524
+ #else
8525
+ ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE ();
8526
+ #endif
8527
+
8528
+ ulTotalTime = ulTotalTime * configNUMBER_OF_CORES ;
8496
8529
8497
8530
/* For percentage calculations. */
8498
8531
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100 ;
0 commit comments