mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-20 05:21:59 -04:00
Add xTaskGetIdleRunTimeCounter() API function to return the run time stats counter for the idle task - useful for POSIX time implementations.
This commit is contained in:
parent
817783d75c
commit
df5952f655
|
@ -152,7 +152,7 @@
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>614</LineNumber>
|
<LineNumber>614</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>23132</Address>
|
<Address>23164</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
|
@ -237,7 +237,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>System</GroupName>
|
<GroupName>System</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -257,7 +257,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>application_and_config</GroupName>
|
<GroupName>application_and_config</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -301,7 +301,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>FreeRTOS_Source</GroupName>
|
<GroupName>FreeRTOS_Source</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
|
|
@ -776,6 +776,9 @@ static void prvTaskToDelete( void *pvParameters )
|
||||||
/* For code coverage test purposes it is deleted by the Idle task. */
|
/* For code coverage test purposes it is deleted by the Idle task. */
|
||||||
configASSERT( uxTaskGetStackHighWaterMark( NULL ) > 0 );
|
configASSERT( uxTaskGetStackHighWaterMark( NULL ) > 0 );
|
||||||
configASSERT( uxTaskGetStackHighWaterMark2( NULL ) > 0 );
|
configASSERT( uxTaskGetStackHighWaterMark2( NULL ) > 0 );
|
||||||
|
/* Run time stats are not being gathered - this is just to exercise
|
||||||
|
API. */
|
||||||
|
configASSERT( xTaskGetIdleRunTimeCounter() == 0 );
|
||||||
vTaskSuspend( NULL );
|
vTaskSuspend( NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1688908204914985791" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-838616105515603833" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
</provider>
|
</provider>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1692822637120195189" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-834701673310394435" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
</provider>
|
</provider>
|
||||||
|
|
Binary file not shown.
|
@ -617,6 +617,8 @@ static portBASE_TYPE xPerformedOneShotTests = pdFALSE;
|
||||||
TaskHandle_t xTestTask;
|
TaskHandle_t xTestTask;
|
||||||
TaskStatus_t xTaskInfo;
|
TaskStatus_t xTaskInfo;
|
||||||
extern StackType_t uxTimerTaskStack[];
|
extern StackType_t uxTimerTaskStack[];
|
||||||
|
static TickType_t xLastIdleExecutionTime = 0;
|
||||||
|
TickType_t xIdleExecutionTime;
|
||||||
|
|
||||||
/* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and
|
/* Demonstrate the use of the xTimerGetTimerDaemonTaskHandle() and
|
||||||
xTaskGetIdleTaskHandle() functions. Also try using the function that sets
|
xTaskGetIdleTaskHandle() functions. Also try using the function that sets
|
||||||
|
@ -715,6 +717,13 @@ extern StackType_t uxTimerTaskStack[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xIdleExecutionTime = xTaskGetIdleRunTimeCounter();
|
||||||
|
if( xIdleExecutionTime == xLastIdleExecutionTime )
|
||||||
|
{
|
||||||
|
pcStatusMessage = "Error: Total amount of Idle task execution time did not change";
|
||||||
|
}
|
||||||
|
xLastIdleExecutionTime = xIdleExecutionTime;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseTy
|
||||||
BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
|
BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
|
||||||
TaskHandle_t MPU_xTaskGetIdleTaskHandle( void );
|
TaskHandle_t MPU_xTaskGetIdleTaskHandle( void );
|
||||||
UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime );
|
UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime );
|
||||||
|
TickType_t MPU_xTaskGetIdleRunTimeCounter( void );
|
||||||
void MPU_vTaskList( char * pcWriteBuffer );
|
void MPU_vTaskList( char * pcWriteBuffer );
|
||||||
void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer );
|
void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer );
|
||||||
BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue );
|
BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue );
|
||||||
|
|
|
@ -77,6 +77,7 @@ only for ports that are using the MPU. */
|
||||||
#define uxTaskGetSystemState MPU_uxTaskGetSystemState
|
#define uxTaskGetSystemState MPU_uxTaskGetSystemState
|
||||||
#define vTaskList MPU_vTaskList
|
#define vTaskList MPU_vTaskList
|
||||||
#define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
|
#define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
|
||||||
|
#define xTaskGetIdleRunTimeCounter MPU_xTaskGetIdleRunTimeCounter
|
||||||
#define xTaskGenericNotify MPU_xTaskGenericNotify
|
#define xTaskGenericNotify MPU_xTaskGenericNotify
|
||||||
#define xTaskNotifyWait MPU_xTaskNotifyWait
|
#define xTaskNotifyWait MPU_xTaskNotifyWait
|
||||||
#define ulTaskNotifyTake MPU_ulTaskNotifyTake
|
#define ulTaskNotifyTake MPU_ulTaskNotifyTake
|
||||||
|
|
|
@ -1728,6 +1728,36 @@ 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. */
|
void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* task. h
|
||||||
|
* <PRE>TickType_t xTaskGetIdleRunTimeCounter( void );</PRE>
|
||||||
|
*
|
||||||
|
* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS
|
||||||
|
* must both be defined as 1 for this function 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, xTaskGetIdleRunTimeCounter()
|
||||||
|
* returns the total execution time of just the idle task.
|
||||||
|
*
|
||||||
|
* @return The total run time of the idle task. This is the amount of time the
|
||||||
|
* idle 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 xTaskGetIdleRunTimeCounter xTaskGetIdleRunTimeCounter
|
||||||
|
* \ingroup TaskUtils
|
||||||
|
*/
|
||||||
|
TickType_t xTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <PRE>BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );</PRE>
|
* <PRE>BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );</PRE>
|
||||||
|
@ -2346,7 +2376,7 @@ void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVIL
|
||||||
void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
|
void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only avilable when configUSE_TICKLESS_IDLE is set to 1.
|
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
||||||
* Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port
|
* Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port
|
||||||
* specific sleep function to determine if it is ok to proceed with the sleep,
|
* specific sleep function to determine if it is ok to proceed with the sleep,
|
||||||
* and if it is ok to proceed, if it is ok to sleep indefinitely.
|
* and if it is ok to proceed, if it is ok to sleep indefinitely.
|
||||||
|
@ -2367,10 +2397,6 @@ eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;
|
||||||
*/
|
*/
|
||||||
TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;
|
TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#if( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )
|
|
||||||
TickType_t xTaskGetIdleRunTimeCounter( void );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For internal use only. Same as vTaskSetTimeOutState(), but without a critial
|
* For internal use only. Same as vTaskSetTimeOutState(), but without a critial
|
||||||
* section.
|
* section.
|
||||||
|
|
|
@ -333,6 +333,19 @@ BaseType_t xRunningPrivileged = xPortRaisePrivilege();
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )
|
||||||
|
TickType_t MPU_xTaskGetIdleRunTimeCounter( void )
|
||||||
|
{
|
||||||
|
TickType_t xReturn;
|
||||||
|
BaseType_t xRunningPrivileged = xPortRaisePrivilege();
|
||||||
|
|
||||||
|
xReturn = xTaskGetIdleRunTimeCounter();
|
||||||
|
vPortResetPrivilege( xRunningPrivileged );
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
|
||||||
void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxTagValue )
|
void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxTagValue )
|
||||||
{
|
{
|
||||||
|
|
|
@ -573,7 +573,7 @@ extern uint32_t __privileged_data_end__[];
|
||||||
( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |
|
( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |
|
||||||
( portMPU_REGION_ENABLE );
|
( portMPU_REGION_ENABLE );
|
||||||
|
|
||||||
/* Setup the first 16K for privileged only access (even though less
|
/* Setup the first nK for privileged only access (even though less
|
||||||
than 10K is actually being used). This is where the kernel code is
|
than 10K is actually being used). This is where the kernel code is
|
||||||
placed. */
|
placed. */
|
||||||
portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */
|
portMPU_REGION_BASE_ADDRESS_REG = ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "portmacro.h"
|
#include "portmacro.h"
|
||||||
|
|
||||||
|
#ifndef configCLINT_BASE_ADDRESS
|
||||||
|
#warning configCLINT_BASE_ADDRESS must be defined in FreeRTOSConfig.h. If the target chip includes a Core Local Interrupter (CLINT) then set configCLINT_BASE_ADDRESS to the CLINT's base address. Otherwise set configCLINT_BASE_ADDRESS to 0.
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Let the user override the pre-loading of the initial LR with the address of
|
/* Let the user override the pre-loading of the initial LR with the address of
|
||||||
prvTaskExitError() in case it messes up unwinding of the stack in the
|
prvTaskExitError() in case it messes up unwinding of the stack in the
|
||||||
debugger. */
|
debugger. */
|
||||||
|
|
Loading…
Reference in a new issue