]> git.sur5r.net Git - freertos/commitdiff
Update some standard demo task implementations so they can be used with the cooperati...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 7 Nov 2013 14:04:05 +0000 (14:04 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 7 Nov 2013 14:04:05 +0000 (14:04 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2086 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/Common/Minimal/BlockQ.c
FreeRTOS/Demo/Common/Minimal/GenQTest.c
FreeRTOS/Demo/Common/Minimal/QPeek.c
FreeRTOS/Demo/Common/Minimal/QueueOverwrite.c
FreeRTOS/Demo/Common/Minimal/QueueSet.c
FreeRTOS/Demo/Common/Minimal/dynamic.c
FreeRTOS/Demo/Common/Minimal/recmutex.c

index a35bf0674c462b42536f826b1550755bb7614964..b9b1adb8743bd5e8595809d49288595df2447f42 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -136,7 +136,7 @@ const portTickType xBlockTime = ( portTickType ) 1000 / portTICK_RATE_MS;
 const portTickType xDontBlock = ( portTickType ) 0;\r
 \r
        /* Create the first two tasks as described at the top of the file. */\r
-       \r
+\r
        /* First create the structure used to pass parameters to the consumer tasks. */\r
        pxQueueParameters1 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );\r
 \r
@@ -150,7 +150,7 @@ const portTickType xDontBlock = ( portTickType ) 0;
        /* Pass in the variable that this task is going to increment so we can check it\r
        is still running. */\r
        pxQueueParameters1->psCheckVariable = &( sBlockingConsumerCount[ 0 ] );\r
-               \r
+\r
        /* Create the structure used to pass parameters to the producer task. */\r
        pxQueueParameters2 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );\r
 \r
@@ -171,7 +171,7 @@ const portTickType xDontBlock = ( portTickType ) 0;
        xTaskCreate( vBlockingQueueConsumer, ( signed char * ) "QConsB1", blckqSTACK_SIZE, ( void * ) pxQueueParameters1, uxPriority, NULL );\r
        xTaskCreate( vBlockingQueueProducer, ( signed char * ) "QProdB2", blckqSTACK_SIZE, ( void * ) pxQueueParameters2, tskIDLE_PRIORITY, NULL );\r
 \r
-       \r
+\r
 \r
        /* Create the second two tasks as described at the top of the file.   This uses\r
        the same mechanism but reverses the task priorities. */\r
@@ -201,7 +201,7 @@ const portTickType xDontBlock = ( portTickType ) 0;
        pxQueueParameters6 = ( xBlockingQueueParameters * ) pvPortMalloc( sizeof( xBlockingQueueParameters ) );\r
        pxQueueParameters6->xQueue = pxQueueParameters5->xQueue;\r
        pxQueueParameters6->xBlockTime = xBlockTime;\r
-       pxQueueParameters6->psCheckVariable = &( sBlockingConsumerCount[ 2 ] ); \r
+       pxQueueParameters6->psCheckVariable = &( sBlockingConsumerCount[ 2 ] );\r
 \r
        xTaskCreate( vBlockingQueueProducer, ( signed char * ) "QProdB5", blckqSTACK_SIZE, ( void * ) pxQueueParameters5, tskIDLE_PRIORITY, NULL );\r
        xTaskCreate( vBlockingQueueConsumer, ( signed char * ) "QConsB6", blckqSTACK_SIZE, ( void * ) pxQueueParameters6, tskIDLE_PRIORITY, NULL );\r
@@ -217,7 +217,7 @@ short sErrorEverOccurred = pdFALSE;
        pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;\r
 \r
        for( ;; )\r
-       {               \r
+       {\r
                if( xQueueSend( pxQueueParameters->xQueue, ( void * ) &usValue, pxQueueParameters->xBlockTime ) != pdPASS )\r
                {\r
                        sErrorEverOccurred = pdTRUE;\r
@@ -234,6 +234,10 @@ short sErrorEverOccurred = pdFALSE;
                        /* Increment the variable we are going to post next time round.  The\r
                        consumer will expect the numbers to     follow in numerical order. */\r
                        ++usValue;\r
+\r
+                       #if configUSE_PREEMPTION == 0\r
+                               taskYIELD();\r
+                       #endif\r
                }\r
        }\r
 }\r
@@ -248,7 +252,7 @@ short sErrorEverOccurred = pdFALSE;
        pxQueueParameters = ( xBlockingQueueParameters * ) pvParameters;\r
 \r
        for( ;; )\r
-       {       \r
+       {\r
                if( xQueueReceive( pxQueueParameters->xQueue, &usData, pxQueueParameters->xBlockTime ) == pdPASS )\r
                {\r
                        if( usData != usExpectedValue )\r
@@ -261,17 +265,26 @@ short sErrorEverOccurred = pdFALSE;
                        else\r
                        {\r
                                /* We have successfully received a message, so increment the\r
-                               variable used to check we are still running. */ \r
+                               variable used to check we are still running. */\r
                                if( sErrorEverOccurred == pdFALSE )\r
                                {\r
                                        ( *pxQueueParameters->psCheckVariable )++;\r
                                }\r
-                                                       \r
+\r
                                /* Increment the value we expect to remove from the queue next time\r
                                round. */\r
                                ++usExpectedValue;\r
-                       }                       \r
-               }               \r
+                       }\r
+\r
+                       #if configUSE_PREEMPTION == 0\r
+                       {\r
+                               if( pxQueueParameters->xBlockTime == 0 )\r
+                               {\r
+                                       taskYIELD();\r
+                               }\r
+                       }\r
+                       #endif\r
+               }\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -286,7 +299,7 @@ portBASE_TYPE xReturn = pdPASS, xTasks;
        /* Not too worried about mutual exclusion on these variables as they are 16\r
        bits and we are only reading them. We also only care to see if they have\r
        changed or not.\r
-       \r
+\r
        Loop through each check variable to and return pdFALSE if any are found not\r
        to have changed since the last call. */\r
 \r
index c74188334f0276ff73cef9c2cc0722e5294162c9..ece93763637c5b65a80ba0ea0773f1b37a48f3e6 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 */\r
 \r
 \r
-/* \r
- * Tests the extra queue functionality introduced in FreeRTOS.org V4.5.0 - \r
- * including xQueueSendToFront(), xQueueSendToBack(), xQueuePeek() and \r
- * mutex behaviour. \r
+/*\r
+ * Tests the extra queue functionality introduced in FreeRTOS.org V4.5.0 -\r
+ * including xQueueSendToFront(), xQueueSendToBack(), xQueuePeek() and\r
+ * mutex behaviour.\r
  *\r
- * See the comments above the prvSendFrontAndBackTest() and \r
+ * See the comments above the prvSendFrontAndBackTest() and\r
  * prvLowPriorityMutexTask() prototypes below for more information.\r
  */\r
 \r
@@ -151,10 +151,10 @@ xSemaphoreHandle xMutex;
        xQueue = xQueueCreate( genqQUEUE_LENGTH, sizeof( unsigned portLONG ) );\r
 \r
        /* vQueueAddToRegistry() adds the queue to the queue registry, if one is\r
-       in use.  The queue registry is provided as a means for kernel aware \r
+       in use.  The queue registry is provided as a means for kernel aware\r
        debuggers to locate queues and has no purpose if a kernel aware debugger\r
        is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is \r
+       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
        defined to be less than 1. */\r
        vQueueAddToRegistry( xQueue, ( signed portCHAR * ) "Gen_Queue_Test" );\r
 \r
@@ -167,10 +167,10 @@ xSemaphoreHandle xMutex;
        xMutex = xSemaphoreCreateMutex();\r
 \r
        /* vQueueAddToRegistry() adds the mutex to the registry, if one is\r
-       in use.  The registry is provided as a means for kernel aware \r
+       in use.  The registry is provided as a means for kernel aware\r
        debuggers to locate mutexes and has no purpose if a kernel aware debugger\r
        is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is \r
+       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
        defined to be less than 1. */\r
        vQueueAddToRegistry( ( xQueueHandle ) xMutex, ( signed portCHAR * ) "Gen_Queue_Mutex" );\r
 \r
@@ -190,7 +190,7 @@ xQueueHandle xQueue;
 \r
        #ifdef USE_STDIO\r
        void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\r
-       \r
+\r
                const portCHAR * const pcTaskStartMsg = "Queue SendToFront/SendToBack/Peek test started.\r\n";\r
 \r
                /* Queue a message for printing to say the task has started. */\r
@@ -312,7 +312,7 @@ xQueueHandle xQueue;
                        {\r
                                xErrorDetected = pdTRUE;\r
                        }\r
-                       \r
+\r
 \r
                        /* Now try receiving the data for real.  The value should be the\r
                        same.  Clobber the value first so we know we really received it. */\r
@@ -417,7 +417,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
 \r
        #ifdef USE_STDIO\r
        void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\r
-       \r
+\r
                const portCHAR * const pcTaskStartMsg = "Mutex with priority inheritance test started.\r\n";\r
 \r
                /* Queue a message for printing to say the task has started. */\r
@@ -446,6 +446,10 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
                mutex, and block when it finds it cannot obtain it. */\r
                vTaskResume( xHighPriorityMutexTask );\r
 \r
+               #if configUSE_PREEMPTION == 0\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* Ensure the task is reporting it priority as blocked and not\r
                suspended (as it would have done in versions up to V7.5.3). */\r
                #if( INCLUDE_eTaskGetState == 1 )\r
@@ -490,6 +494,10 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
+               #if configUSE_PREEMPTION == 0\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* Check that the guarded variable did indeed increment... */\r
                if( ulGuardedVariable != 1 )\r
                {\r
@@ -512,7 +520,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
 \r
                #if configUSE_PREEMPTION == 0\r
                        taskYIELD();\r
-               #endif          \r
+               #endif\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -558,7 +566,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
                if( xSemaphoreGive( xMutex ) != pdPASS )\r
                {\r
                        xErrorDetected = pdTRUE;\r
-               }               \r
+               }\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -581,7 +589,7 @@ static unsigned portLONG ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;
        }\r
 \r
        ulLastLoopCounter = ulLoopCounter;\r
-       ulLastLoopCounter2 = ulLoopCounter2;    \r
+       ulLastLoopCounter2 = ulLoopCounter2;\r
 \r
        /* Errors detected in the task itself will have latched xErrorDetected\r
        to true. */\r
index c445d82a0c043e75f2a925b8c567f30d96481dad..61243402214970fee5a639bda75f68ad6eb0cc5b 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -64,7 +64,7 @@
 */\r
 \r
 \r
-/* \r
+/*\r
  * Tests the behaviour when data is peeked from a queue when there are\r
  * multiple tasks blocked on the queue.\r
  */\r
@@ -124,10 +124,10 @@ xQueueHandle xQueue;
        xQueue = xQueueCreate( qpeekQUEUE_LENGTH, sizeof( unsigned portLONG ) );\r
 \r
        /* vQueueAddToRegistry() adds the queue to the queue registry, if one is\r
-       in use.  The queue registry is provided as a means for kernel aware \r
+       in use.  The queue registry is provided as a means for kernel aware\r
        debuggers to locate queues and has no purpose if a kernel aware debugger\r
        is not being used.  The call to vQueueAddToRegistry() will be removed\r
-       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is \r
+       by the pre-processor if configQUEUE_REGISTRY_SIZE is not defined or is\r
        defined to be less than 1. */\r
        vQueueAddToRegistry( xQueue, ( signed portCHAR * ) "QPeek_Test_Queue" );\r
 \r
@@ -149,7 +149,7 @@ unsigned portLONG ulValue;
        #ifdef USE_STDIO\r
        {\r
                void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\r
-       \r
+\r
                const portCHAR * const pcTaskStartMsg = "Queue peek test started.\r\n";\r
 \r
                /* Queue a message for printing to say the task has started. */\r
@@ -202,7 +202,7 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
-               /* Now we will block again as the queue is once more empty.  The low \r
+               /* Now we will block again as the queue is once more empty.  The low\r
                priority task can then execute again. */\r
                if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
                {\r
@@ -245,7 +245,7 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
-               vTaskSuspend( NULL );           \r
+               vTaskSuspend( NULL );\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -300,7 +300,7 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
-               vTaskSuspend( NULL );                           \r
+               vTaskSuspend( NULL );\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -353,7 +353,7 @@ unsigned portLONG ulValue;
 \r
        for( ;; )\r
        {\r
-               /* Write some data to the queue.  This should unblock the highest \r
+               /* Write some data to the queue.  This should unblock the highest\r
                priority task that is waiting to peek data from the queue. */\r
                ulValue = 0x11223344;\r
                if( xQueueSendToBack( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
@@ -363,6 +363,10 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
+               #if configUSE_PREEMPTION == 0\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* By the time we get here the data should have been removed from\r
                the queue. */\r
                if( uxQueueMessagesWaiting( xQueue ) != 0 )\r
@@ -380,6 +384,10 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
+               #if configUSE_PREEMPTION == 0\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* All the other tasks should now have successfully peeked the data.\r
                The data is still in the queue so we should be able to receive it. */\r
                ulValue = 0;\r
@@ -393,7 +401,7 @@ unsigned portLONG ulValue;
                {\r
                        /* We did not receive the expected value. */\r
                }\r
-               \r
+\r
                /* Lets just delay a while as this is an intensive test as we don't\r
                want to starve other tests of processing time. */\r
                vTaskDelay( qpeekSHORT_DELAY );\r
@@ -407,6 +415,10 @@ unsigned portLONG ulValue;
                vTaskResume( xHighPriorityTask );\r
                vTaskResume( xHighestPriorityTask );\r
 \r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
+\r
                ulValue = 0xaabbaabb;\r
                if( xQueueSendToFront( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
                {\r
@@ -415,6 +427,10 @@ unsigned portLONG ulValue;
                        xErrorDetected = pdTRUE;\r
                }\r
 \r
+               #if configUSE_PREEMPTION == 0\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* This time we should find that the queue is empty.  The high priority\r
                task actually removed the data rather than just peeking it. */\r
                if( xQueuePeek( xQueue, &ulValue, qpeekNO_BLOCK ) != errQUEUE_EMPTY )\r
@@ -427,7 +443,7 @@ unsigned portLONG ulValue;
                and repeat the whole thing.  The medium priority task should not be\r
                suspended as it was not able to peek the data in this last case. */\r
                vTaskResume( xHighPriorityTask );\r
-               vTaskResume( xHighestPriorityTask );            \r
+               vTaskResume( xHighestPriorityTask );\r
 \r
                /* Lets just delay a while as this is an intensive test as we don't\r
                want to starve other tests of processing time. */\r
index bd0f4c0a6d4b3fa88b7111bbef4279a185c825fd..3ab32ec7a94281d448f7691d679c4354c6dce0b9 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -178,6 +178,10 @@ unsigned long ulValue, ulStatus = pdPASS, x;
                        error. */\r
                        ulLoopCounter++;\r
                }\r
+\r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -236,7 +240,7 @@ unsigned long ulRx;
                case 1:\r
                        /* The queue already holds ulTx1.  Overwrite the value in the queue\r
                        with ulTx2. */\r
-                       xQueueOverwriteFromISR( xISRQueue, &ulTx2, NULL );                      \r
+                       xQueueOverwriteFromISR( xISRQueue, &ulTx2, NULL );\r
                        break;\r
 \r
                case 2:\r
index 1b8dec6de57244c3a1956e70e66b9df9443d0d51..0ba95269979f8cb60936932110b4d392d7a980be 100644 (file)
@@ -319,6 +319,10 @@ xQueueHandle xQueueInUse;
                        xQueueSetTasksStatus = pdFAIL;\r
                }\r
 \r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
+\r
                ulTaskTxValue++;\r
 \r
                /* If the Tx value has reached the range used by the ISR then set it\r
index 1b24ab1ac83537b827cc817c83a926bad32a4764..c72f5d3813392bf4d9cc303117057722afd413c8 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -257,6 +257,11 @@ unsigned portBASE_TYPE uxOurPriority;
                        ( *pulCounter )++;\r
                }\r
                vTaskPrioritySet( NULL, uxOurPriority );\r
+\r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
+\r
                configASSERT( ( uxTaskPriorityGet( NULL ) == uxOurPriority ) );\r
        }\r
 }\r
@@ -300,6 +305,10 @@ short sError = pdFALSE;
                        }\r
                        vTaskResume( xContinuousIncrementHandle );\r
 \r
+                       #if( configUSE_PREEMPTION == 0 )\r
+                               taskYIELD();\r
+                       #endif\r
+\r
                        #if( INCLUDE_eTaskGetState == 1 )\r
                        {\r
                                configASSERT( eTaskGetState( xContinuousIncrementHandle ) == eReady );\r
@@ -344,6 +353,10 @@ short sError = pdFALSE;
                task has suspended itself with a known value in the counter variable. */\r
                vTaskResume( xLimitedIncrementHandle );\r
 \r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
+\r
                /* This task should not run again until xLimitedIncrementHandle has\r
                suspended itself. */\r
                #if( INCLUDE_eTaskGetState == 1 )\r
@@ -368,6 +381,10 @@ short sError = pdFALSE;
 \r
                /* Resume the continuous count task and do it all again. */\r
                vTaskResume( xContinuousIncrementHandle );\r
+\r
+               #if( configUSE_PREEMPTION == 0 )\r
+                       taskYIELD();\r
+               #endif\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
index 3ddc0d0ee089dcaa344fc68be513ef503c74792a..16078ef23ae658479469025cd795b7411d72101d 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd. \r
+    FreeRTOS V7.5.3 - Copyright (C) 2013 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r