@@ -8415,7 +8415,7 @@ TickType_t uxTaskResetEventItemValue( void )
8415
8415
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter ( const TaskHandle_t xTask )
8416
8416
{
8417
8417
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 ;
8419
8419
8420
8420
traceENTER_ulTaskGetRunTimeCounter ( xTask );
8421
8421
@@ -8427,25 +8427,25 @@ TickType_t uxTaskResetEventItemValue( void )
8427
8427
if ( taskTASK_IS_RUNNING ( pxTCB ) == pdTRUE )
8428
8428
{
8429
8429
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8430
- portALT_GET_RUN_TIME_COUNTER_VALUE ( ulCurrentRunTimeCounter );
8430
+ portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
8431
8431
#else
8432
- ulCurrentRunTimeCounter = portGET_RUN_TIME_COUNTER_VALUE ();
8432
+ ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE ();
8433
8433
#endif
8434
8434
8435
8435
#if ( configNUMBER_OF_CORES == 1 )
8436
- ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ 0 ];
8436
+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ 0 ];
8437
8437
#else
8438
- ulTimeSinceLastSwitchedIn = ulCurrentRunTimeCounter - ulTaskSwitchedInTime [ pxTCB -> xTaskRunState ];
8438
+ ulTimeSinceLastSwitchedIn = ulTotalTime - ulTaskSwitchedInTime [ pxTCB -> xTaskRunState ];
8439
8439
#endif
8440
8440
}
8441
8441
8442
- ulTotalRunTime = pxTCB -> ulRunTimeCounter + ulTimeSinceLastSwitchedIn ;
8442
+ ulTaskRunTime = pxTCB -> ulRunTimeCounter + ulTimeSinceLastSwitchedIn ;
8443
8443
}
8444
8444
taskEXIT_CRITICAL ();
8445
8445
8446
- traceRETURN_ulTaskGetRunTimeCounter ( ulTotalRunTime );
8446
+ traceRETURN_ulTaskGetRunTimeCounter ( ulTaskRunTime );
8447
8447
8448
- return ulTotalRunTime ;
8448
+ return ulTaskRunTime ;
8449
8449
}
8450
8450
8451
8451
#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
@@ -8456,11 +8456,11 @@ TickType_t uxTaskResetEventItemValue( void )
8456
8456
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent ( const TaskHandle_t xTask )
8457
8457
{
8458
8458
TCB_t * pxTCB ;
8459
- configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn , ulTaskRunTimeCounter ;
8459
+ configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn , ulTaskRunTime ;
8460
8460
8461
8461
traceENTER_ulTaskGetRunTimePercent ( xTask );
8462
8462
8463
- ulTaskRunTimeCounter = ulTaskGetRunTimeCounter ( xTask );
8463
+ ulTaskRunTime = ulTaskGetRunTimeCounter ( xTask );
8464
8464
8465
8465
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
8466
8466
portALT_GET_RUN_TIME_COUNTER_VALUE ( ulTotalTime );
@@ -8477,7 +8477,7 @@ TickType_t uxTaskResetEventItemValue( void )
8477
8477
pxTCB = prvGetTCBFromHandle ( xTask );
8478
8478
configASSERT ( pxTCB != NULL );
8479
8479
8480
- ulReturn = ulTaskRunTimeCounter / ulTotalTime ;
8480
+ ulReturn = ulTaskRunTime / ulTotalTime ;
8481
8481
}
8482
8482
else
8483
8483
{
@@ -8496,19 +8496,41 @@ TickType_t uxTaskResetEventItemValue( void )
8496
8496
8497
8497
configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter ( void )
8498
8498
{
8499
- configRUN_TIME_COUNTER_TYPE ulReturn = 0 ;
8499
+ configRUN_TIME_COUNTER_TYPE ulTotalTime = 0 , ulTimeSinceLastSwitchedIn = 0 , ulIdleTaskRunTime = 0 ;
8500
8500
BaseType_t i ;
8501
8501
8502
8502
traceENTER_ulTaskGetIdleRunTimeCounter ();
8503
8503
8504
- for ( i = 0 ; i < ( BaseType_t ) configNUMBER_OF_CORES ; i ++ )
8504
+ taskENTER_CRITICAL ();
8505
8505
{
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
+ }
8507
8528
}
8529
+ taskEXIT_CRITICAL ();
8508
8530
8509
- traceRETURN_ulTaskGetIdleRunTimeCounter ( ulReturn );
8531
+ traceRETURN_ulTaskGetIdleRunTimeCounter ( ulIdleTaskRunTime );
8510
8532
8511
- return ulReturn ;
8533
+ return ulIdleTaskRunTime ;
8512
8534
}
8513
8535
8514
8536
#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
@@ -8520,7 +8542,6 @@ TickType_t uxTaskResetEventItemValue( void )
8520
8542
{
8521
8543
configRUN_TIME_COUNTER_TYPE ulTotalTime , ulReturn ;
8522
8544
configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0 ;
8523
- BaseType_t i ;
8524
8545
8525
8546
traceENTER_ulTaskGetIdleRunTimePercent ();
8526
8547
@@ -8530,19 +8551,15 @@ TickType_t uxTaskResetEventItemValue( void )
8530
8551
ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE ();
8531
8552
#endif
8532
8553
8533
- ulTotalTime = ulTotalTime * configNUMBER_OF_CORES ;
8554
+ ulTotalTime *= configNUMBER_OF_CORES ;
8534
8555
8535
8556
/* For percentage calculations. */
8536
8557
ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100 ;
8537
8558
8538
8559
/* Avoid divide by zero errors. */
8539
8560
if ( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
8540
8561
{
8541
- for ( i = 0 ; i < ( BaseType_t ) configNUMBER_OF_CORES ; i ++ )
8542
- {
8543
- ulRunTimeCounter += xIdleTaskHandles [ i ]-> ulRunTimeCounter ;
8544
- }
8545
-
8562
+ ulRunTimeCounter = ulTaskGetIdleRunTimeCounter ();
8546
8563
ulReturn = ulRunTimeCounter / ulTotalTime ;
8547
8564
}
8548
8565
else
0 commit comments