]> git.sur5r.net Git - freertos/commitdiff
Added uxTimerGetReloadMode() API function.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 16 Jan 2020 04:10:18 +0000 (04:10 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 16 Jan 2020 04:10:18 +0000 (04:10 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2804 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/include/mpu_prototypes.h
FreeRTOS/Source/include/mpu_wrappers.h
FreeRTOS/Source/include/timers.h
FreeRTOS/Source/portable/Common/mpu_wrappers.c
FreeRTOS/Source/tasks.c
FreeRTOS/Source/timers.c

index 08b2d1aacc9f4a179149d7801ef63d8cdb5a16f3..c1fd2b01123c1d3c508f8eb3a50e84b1bebbd904 100644 (file)
@@ -124,6 +124,7 @@ TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL;
 BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
 const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
 void MPU_vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL;\r
+UBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
 TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
 TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
 BaseType_t MPU_xTimerCreateTimerTask( void ) FREERTOS_SYSTEM_CALL;\r
index 6ac0a3e9264178f4300c90248c7bd46684815770..b131042adbb99a8e0117244e3d72a5aa9094a5a4 100644 (file)
@@ -129,6 +129,7 @@ only for ports that are using the MPU. */
                #define xTimerPendFunctionCall                                  MPU_xTimerPendFunctionCall\r
                #define pcTimerGetName                                                  MPU_pcTimerGetName\r
                #define vTimerSetReloadMode                                             MPU_vTimerSetReloadMode\r
+               #define uxTimerGetReloadMode                                    MPU_uxTimerGetReloadMode\r
                #define xTimerGetPeriod                                                 MPU_xTimerGetPeriod\r
                #define xTimerGetExpiryTime                                             MPU_xTimerGetExpiryTime\r
                #define xTimerGenericCommand                                    MPU_xTimerGenericCommand\r
index 5abb7f1812f7da0fd66acfc537a6334436ab8e37..4d77665f8e9c453de60d0a5ceb91fcdf8e5640ef 100644 (file)
@@ -1234,7 +1234,7 @@ const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint
 /**\r
  * void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload );\r
  *\r
- * Updates a timer to be either an autoreload timer, in which case the timer\r
+ * Updates a timer to be either an auto-reload timer, in which case the timer\r
  * automatically resets itself each time it expires, or a one shot timer, in\r
  * which case the timer will only expire once unless it is manually restarted.\r
  *\r
@@ -1248,6 +1248,20 @@ const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint
  */\r
 void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) PRIVILEGED_FUNCTION;\r
 \r
+/**\r
+* UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer );\r
+*\r
+* Queries a timer to determine if it is an auto-reload timer, in which case the timer\r
+* automatically resets itself each time it expires, or a one shot timer, in\r
+* which case the timer will only expire once unless it is manually restarted.\r
+*\r
+* @param xTimer The handle of the timer being queried.\r
+*\r
+* @return If the timer is an auto-reload timer then pdTRUE is returned, otherwise\r
+* pdFALSE is returned.\r
+*/\r
+UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\r
+\r
 /**\r
  * TickType_t xTimerGetPeriod( TimerHandle_t xTimer );\r
  *\r
index 39d9c961761296562fa389c68657623c5389c6ad..d183e903b859be01c161ea76aab1a01a7c63f81a 100644 (file)
@@ -1054,6 +1054,19 @@ BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 #endif\r
 /*-----------------------------------------------------------*/\r
 \r
+#if( configUSE_TIMERS == 1 )\r
+       UBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer )\r
+       {\r
+       BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
+       UBaseType_t uxReturn;\r
+\r
+               uxReturn = uxTimerGetReloadMode( xTimer );\r
+               vPortResetPrivilege( xRunningPrivileged );\r
+               return uxReturn;\r
+       }\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
 #if( configUSE_TIMERS == 1 )\r
        const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) /* FREERTOS_SYSTEM_CALL */\r
        {\r
index e62b388602fcaec3178b6791d746295fb22f4be7..5129bf981a6a4f9c4cc8d13a81e180118ef8d8c3 100644 (file)
@@ -3654,6 +3654,7 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters )
                if( xIndex < configNUM_THREAD_LOCAL_STORAGE_POINTERS )\r
                {\r
                        pxTCB = prvGetTCBFromHandle( xTaskToSet );\r
+                       configASSERT( pxTCB != NULL );\r
                        pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue;\r
                }\r
        }\r
index 80c8d9b2d2029b75dee1c7381e1345870ac8470d..12a2f4e9b6a6213d1befd75a5a3fa61d6e076390 100644 (file)
@@ -182,7 +182,7 @@ static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const Tic
 \r
 /*\r
  * An active timer has reached its expire time.  Reload the timer if it is an\r
- * auto reload timer, then call its callback.\r
+ * auto-reload timer, then call its callback.\r
  */\r
 static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow ) PRIVILEGED_FUNCTION;\r
 \r
@@ -292,7 +292,7 @@ BaseType_t xReturn = pdFAIL;
                if( pxNewTimer != NULL )\r
                {\r
                        /* Status is thus far zero as the timer is not created statically\r
-                       and has not been started.  The autoreload bit may get set in\r
+                       and has not been started.  The auto-reload bit may get set in\r
                        prvInitialiseNewTimer. */\r
                        pxNewTimer->ucStatus = 0x00;\r
                        prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );\r
@@ -334,7 +334,7 @@ BaseType_t xReturn = pdFAIL;
                {\r
                        /* Timers can be created statically or dynamically so note this\r
                        timer was created statically in case it is later deleted.  The\r
-                       autoreload bit may get set in prvInitialiseNewTimer(). */\r
+                       auto-reload bit may get set in prvInitialiseNewTimer(). */\r
                        pxNewTimer->ucStatus = tmrSTATUS_IS_STATICALLY_ALLOCATED;\r
 \r
                        prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );\r
@@ -459,6 +459,31 @@ Timer_t * pxTimer =  xTimer;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer )\r
+{\r
+Timer_t * pxTimer =  xTimer;\r
+UBaseType_t uxReturn;\r
+\r
+       configASSERT( xTimer );\r
+       taskENTER_CRITICAL();\r
+       {\r
+               if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) == 0 )\r
+               {\r
+                       /* Not an auto-reload timer. */\r
+                       uxReturn = ( UBaseType_t ) pdFALSE;\r
+               }\r
+               else\r
+               {\r
+                       /* Is an auto-reload timer. */\r
+                       uxReturn = ( UBaseType_t ) pdTRUE;\r
+               }\r
+       }\r
+       taskEXIT_CRITICAL();\r
+\r
+       return uxReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer )\r
 {\r
 Timer_t * pxTimer =  xTimer;\r
@@ -489,7 +514,7 @@ Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTi
        ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );\r
        traceTIMER_EXPIRED( pxTimer );\r
 \r
-       /* If the timer is an auto reload timer then calculate the next\r
+       /* If the timer is an auto-reload timer then calculate the next\r
        expiry time and re-insert the timer in the list of active timers. */\r
        if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )\r
        {\r