]> git.sur5r.net Git - freertos/commitdiff
Improve how TimerDemo.c manages differences between the tick count and its own intern...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 14:55:53 +0000 (14:55 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 4 Feb 2014 14:55:53 +0000 (14:55 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2191 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/Common/Minimal/EventGroupsDemo.c
FreeRTOS/Demo/Common/Minimal/TimerDemo.c

index 8d46087892b733fb65001e6cce582f702c5a274f..8abad5142afc92d816b0cab6bfdbcb6a3aa21fa0 100644 (file)
@@ -326,6 +326,9 @@ EventBits_t uxSynchronisationBit, uxReturned;
                case. */\r
                configASSERT( ( uxReturned & ebALL_SYNC_BITS ) == ebALL_SYNC_BITS );\r
 \r
+               /* Remove compiler warning if configASSERT() is not defined. */\r
+               ( void ) uxReturned;\r
+\r
                /* Wait until the 'test master' task unsuspends this task again. */\r
                vTaskSuspend( NULL );\r
 \r
index 1c06e891a8d369270e957947b0de91856f0849cb..27f5ed923dafa04881ba5d278020bcab447e9ae7 100644 (file)
@@ -245,9 +245,9 @@ static portTickType xIterationsWithoutCounterIncrement = ( portTickType ) 0, xLa
        necessary because the tests in this file block for extended periods, and the\r
        block period might be longer than the time between calls to this function. */\r
        xMaxBlockTimeUsedByTheseTests = ( ( portTickType ) configTIMER_QUEUE_LENGTH ) * xBasePeriod;\r
-       xLoopCounterIncrementTimeMax = xMaxBlockTimeUsedByTheseTests / xCycleFrequency;\r
+       xLoopCounterIncrementTimeMax = ( xMaxBlockTimeUsedByTheseTests / xCycleFrequency ) + 1;\r
 \r
-       /* If the demo task is still running then we expect the loopcounter to\r
+       /* If the demo task is still running then the loop counter is expected to\r
        have incremented every xLoopCounterIncrementTimeMax calls. */\r
        if( ulLastLoopCounter == ulLoopCounter )\r
        {\r
@@ -717,11 +717,6 @@ void vTimerPeriodicISRTests( void )
 {\r
 static portTickType uxTick = ( portTickType ) -1;\r
 \r
-/* The xHigherPriorityTaskWoken parameter is not used in this case as this\r
-function is called from the tick hook anyway.  However the API required it\r
-to be present. */\r
-signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
-\r
 #if( configTIMER_TASK_PRIORITY != ( configMAX_PRIORITIES - 1 ) )\r
        /* The timer service task is not the highest priority task, so it cannot\r
        be assumed that timings will be exact.  Timers should never call their\r
@@ -731,30 +726,15 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        is the highest priority task in the system. */\r
        const portTickType xMargin = 5;\r
 #else\r
-\r
-       const portTickType xMargin = 1;\r
+       const portTickType xMargin = 2;\r
 #endif\r
 \r
-       /* This test is called from the tick ISR even when the scheduler is suspended.\r
-       Therefore, it is possible for the xTickCount to be temporarily less than the\r
-       uxTicks count maintained in this function.  That can result in calculated\r
-       unblock times being too short, as this function is not called as missed ticks\r
-       (ticks that occur while the scheduler is suspended) are unwound to reinstate\r
-       the real tick value.  Therefore, if this happens, just abandon the test\r
-       and start again. */\r
-       if( xTaskGetSchedulerState() != taskSCHEDULER_RUNNING )\r
-       {\r
-               uxTick = ( portTickType ) -1;\r
-       }\r
-       else\r
-       {\r
-               uxTick++;\r
-       }\r
+       uxTick++;\r
 \r
-       if( uxTick == ( xBasePeriod >> 1 ) )\r
+       if( uxTick == 0 )\r
        {\r
-               /* The timers will have been created, but not started.  Start them\r
-               now by setting their period. */\r
+               /* The timers will have been created, but not started.  Start them now \r
+               by setting their period. */\r
                ucISRAutoReloadTimerCounter = 0;\r
                ucISROneShotTimerCounter = 0;\r
 \r
@@ -762,15 +742,22 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                timer queue.  If the timers cannot be started then reset uxTick so\r
                another attempt is made later. */\r
                uxTick = ( portTickType ) -1;\r
-               if( xTimerChangePeriodFromISR( xISRAutoReloadTimer, xBasePeriod, &xHigherPriorityTaskWoken ) == pdPASS )\r
+\r
+               /* Try starting first timer. */\r
+               if( xTimerChangePeriodFromISR( xISRAutoReloadTimer, xBasePeriod, NULL ) == pdPASS )\r
                {\r
-                       if( xTimerChangePeriodFromISR( xISROneShotTimer, xBasePeriod, &xHigherPriorityTaskWoken ) == pdPASS )\r
+                       /* First timer was started, try starting the second timer. */\r
+                       if( xTimerChangePeriodFromISR( xISROneShotTimer, xBasePeriod, NULL ) == pdPASS )\r
                        {\r
+                               /* Both timers were started, so set the uxTick back to its \r
+                               proper value. */\r
                                uxTick = 0;\r
                        }\r
                        else\r
                        {\r
-                               xTimerStopFromISR( xISRAutoReloadTimer, &xHigherPriorityTaskWoken );\r
+                               /* Second timer could not be started, so stop the first one\r
+                               again. */\r
+                               xTimerStopFromISR( xISRAutoReloadTimer, NULL );\r
                        }\r
                }\r
        }\r
@@ -841,7 +828,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        else if( uxTick == ( 3 * xBasePeriod ) )\r
        {\r
                /* Start the one shot timer again. */\r
-               xTimerStartFromISR( xISROneShotTimer, &xHigherPriorityTaskWoken );\r
+               xTimerStartFromISR( xISROneShotTimer, NULL );\r
        }\r
        else if( uxTick == ( ( 3 * xBasePeriod ) + xMargin ) )\r
        {\r
@@ -862,7 +849,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                \r
                /* Now stop the auto reload timer.  The one shot timer was started\r
                a few ticks ago. */\r
-               xTimerStopFromISR( xISRAutoReloadTimer, &xHigherPriorityTaskWoken );\r
+               xTimerStopFromISR( xISRAutoReloadTimer, NULL );\r
        }       \r
        else if( uxTick == ( 4 * xBasePeriod ) )\r
        {\r
@@ -916,7 +903,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                }\r
                \r
                /* Now reset the one shot timer. */\r
-               xTimerResetFromISR( xISROneShotTimer, &xHigherPriorityTaskWoken );\r
+               xTimerResetFromISR( xISROneShotTimer, NULL );\r
        }       \r
        else if( uxTick == ( 9 * xBasePeriod ) )\r
        {\r
@@ -935,7 +922,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                        configASSERT( xTestStatus );\r
                }\r
                \r
-               xTimerResetFromISR( xISROneShotTimer, &xHigherPriorityTaskWoken );\r
+               xTimerResetFromISR( xISROneShotTimer, NULL );\r
        }       \r
        else if( uxTick == ( 10 * xBasePeriod ) )\r
        {\r
@@ -954,7 +941,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                        configASSERT( xTestStatus );\r
                }\r
                \r
-               xTimerResetFromISR( xISROneShotTimer, &xHigherPriorityTaskWoken );\r
+               xTimerResetFromISR( xISROneShotTimer, NULL );\r
        }\r
        else if( uxTick == ( 11 * xBasePeriod ) )\r
        {\r
@@ -973,7 +960,7 @@ signed portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                        configASSERT( xTestStatus );\r
                }\r
                \r
-               xTimerResetFromISR( xISROneShotTimer, &xHigherPriorityTaskWoken );\r
+               xTimerResetFromISR( xISROneShotTimer, NULL );\r
        }       \r
        else if( uxTick == ( ( 12 * xBasePeriod ) + xMargin ) )\r
        {\r