Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ulTaskGetRunTimeCounter and ulTaskGetRunTimePercent #611

Merged
merged 2 commits into from
Jan 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/lexicon.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2321,6 +2321,8 @@ ulstoppedtimercompensation
ultablebase
ultaskgetidleruntimecounter
ultaskgetidleruntimepercent
ultaskgetruntimecounter
ultaskgetruntimepercent
ultaskhasfpucontext
ultasknotifystateclear
ultasknotifytake
Expand Down
49 changes: 42 additions & 7 deletions include/task.h
Original file line number Diff line number Diff line change
Expand Up @@ -1934,20 +1934,55 @@ void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unquali
*/
void vTaskGetRunTimeStats( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */

/**
* task. h
* @code{c}
* configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask );
* configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask );
* @endcode
*
* configGENERATE_RUN_TIME_STATS must be defined as 1 for these functions to be
* available. The application must also then provide definitions for
* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
* portGET_RUN_TIME_COUNTER_VALUE() to configure a peripheral timer/counter and
* return the timers current count value respectively. The counter should be
* at least 10 times the frequency of the tick count.
*
* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
* accumulated execution time being stored for each task. The resolution
* of the accumulated time value depends on the frequency of the timer
* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.
* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total
* execution time of each task into a buffer, ulTaskGetRunTimeCounter()
* returns the total execution time of just one task and
* ulTaskGetRunTimePercent() returns the percentage of the CPU time used by
* just one task.
*
* @return The total run time of the given task or the percentage of the total
* run time consumed by the given task. This is the amount of time the task
* has actually been executing. The unit of time is dependent on the frequency
* configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
* portGET_RUN_TIME_COUNTER_VALUE() macros.
*
* \defgroup ulTaskGetRunTimeCounter ulTaskGetRunTimeCounter
* \ingroup TaskUtils
*/
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;

/**
* task. h
* @code{c}
* configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void );
* configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void );
* @endcode
*
* configGENERATE_RUN_TIME_STATS, configUSE_STATS_FORMATTING_FUNCTIONS and
* INCLUDE_xTaskGetIdleTaskHandle must all be defined as 1 for these functions
* to be available. The application must also then provide definitions for
* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE()
* to configure a peripheral timer/counter and return the timers current count
* value respectively. The counter should be at least 10 times the frequency of
* the tick count.
* configGENERATE_RUN_TIME_STATS must be defined as 1 for these functions to be
* available. The application must also then provide definitions for
* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
* portGET_RUN_TIME_COUNTER_VALUE() to configure a peripheral timer/counter and
* return the timers current count value respectively. The counter should be
* at least 10 times the frequency of the tick count.
*
* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
* accumulated execution time being stored for each task. The resolution
Expand Down
34 changes: 27 additions & 7 deletions tasks.c
Original file line number Diff line number Diff line change
Expand Up @@ -5251,19 +5251,19 @@ TickType_t uxTaskResetEventItemValue( void )
#endif /* configUSE_TASK_NOTIFICATIONS */
/*-----------------------------------------------------------*/

#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )
#if ( configGENERATE_RUN_TIME_STATS == 1 )

configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask )
{
return xIdleTaskHandle->ulRunTimeCounter;
return xTask->ulRunTimeCounter;
}

#endif
/*-----------------------------------------------------------*/

#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )
#if ( configGENERATE_RUN_TIME_STATS == 1 )

configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void )
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )
{
configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;

Expand All @@ -5275,7 +5275,7 @@ TickType_t uxTaskResetEventItemValue( void )
/* Avoid divide by zero errors. */
if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
{
ulReturn = xIdleTaskHandle->ulRunTimeCounter / ulTotalTime;
ulReturn = xTask->ulRunTimeCounter / ulTotalTime;
}
else
{
Expand All @@ -5285,7 +5285,27 @@ TickType_t uxTaskResetEventItemValue( void )
return ulReturn;
}

#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */
/*-----------------------------------------------------------*/

#if ( configGENERATE_RUN_TIME_STATS == 1 )

configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void )
{
return ulTaskGetRunTimeCounter( xIdleTaskHandle );
}

#endif
/*-----------------------------------------------------------*/

#if ( configGENERATE_RUN_TIME_STATS == 1 )

configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void )
{
return ulTaskGetRunTimePercent( xIdleTaskHandle );
}

#endif
/*-----------------------------------------------------------*/

static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
Expand Down