]> git.sur5r.net Git - freertos/commitdiff
Move the call that sets xTimeNow inside the loop that drains the timer queue to ensur...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 18 Nov 2012 09:13:39 +0000 (09:13 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 18 Nov 2012 09:13:39 +0000 (09:13 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1812 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/timers.c

index e68cc03414a011bdc5959e37af5c9303dba9e2f0..bc4ef062d37e3503be5732b2d7a7b062122a77bb 100644 (file)
@@ -512,10 +512,6 @@ xTIMER *pxTimer;
 portBASE_TYPE xTimerListsWereSwitched, xResult;\r
 portTickType xTimeNow;\r
 \r
-       /* In this case the xTimerListsWereSwitched parameter is not used, but it\r
-       must be present in the function call. */\r
-       xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );\r
-\r
        while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL )\r
        {\r
                pxTimer = xMessage.pxTimer;\r
@@ -528,6 +524,14 @@ portTickType xTimeNow;
 \r
                traceTIMER_COMMAND_RECEIVED( pxTimer, xMessage.xMessageID, xMessage.xMessageValue );\r
 \r
+               /* In this case the xTimerListsWereSwitched parameter is not used, but \r
+               it must be present in the function call.  prvSampleTimeNow() must be \r
+               called after the message is received from xTimerQueue so there is no \r
+               possibility of a higher priority task adding a message to the message\r
+               queue with a time that is ahead of the timer daemon task (because it\r
+               pre-empted the timer daemon task after the xTimeNow value was set). */\r
+               xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );\r
+\r
                switch( xMessage.xMessageID )\r
                {\r
                        case tmrCOMMAND_START :\r
@@ -680,3 +684,6 @@ xTIMER *pxTimer = ( xTIMER * ) xTimer;
 to include software timer functionality.  If you want to include software timer\r
 functionality then ensure configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */\r
 #endif /* configUSE_TIMERS == 1 */\r
+\r
+\r
+\r