]> git.sur5r.net Git - freertos/commitdiff
Update the queue peek behaviour and add QPeek test files.
authorRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Aug 2007 11:37:41 +0000 (11:37 +0000)
committerRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Aug 2007 11:37:41 +0000 (11:37 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@106 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/Common/Minimal/QPeek.c [new file with mode: 0644]
Demo/Common/include/QPeek.h [new file with mode: 0644]
Demo/PC/main.c
Demo/PC/rtosdemo.tgt
Demo/PC/rtosdemo.wpj
Source/queue.c

diff --git a/Demo/Common/Minimal/QPeek.c b/Demo/Common/Minimal/QPeek.c
new file mode 100644 (file)
index 0000000..c36e515
--- /dev/null
@@ -0,0 +1,420 @@
+/*\r
+       FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along\r
+       with commercial development and support options.\r
+       ***************************************************************************\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
+\r
+\r
+#include <stdlib.h>\r
+\r
+/* Scheduler include files. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "queue.h"\r
+#include "semphr.h"\r
+\r
+/* Demo program include files. */\r
+#include "QPeek.h"\r
+\r
+#define qpeekQUEUE_LENGTH              ( 5 )\r
+#define qpeekNO_BLOCK                  ( 0 )\r
+#define qpeekSHORT_DELAY               ( 10 )\r
+\r
+#define qpeekLOW_PRIORITY                      ( tskIDLE_PRIORITY + 0 )\r
+#define qpeekMEDIUM_PRIORITY           ( tskIDLE_PRIORITY + 1 )\r
+#define qpeekHIGH_PRIORITY                     ( tskIDLE_PRIORITY + 2 )\r
+#define qpeekHIGHEST_PRIORITY          ( tskIDLE_PRIORITY + 3 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * The following three tasks are used to demonstrate the peeking behaviour.\r
+ * Each task is given a different priority to demonstrate the order in which\r
+ * tasks are woken as data is peeked from a queue.\r
+ */\r
+static void prvLowPriorityPeekTask( void *pvParameters );\r
+static void prvMediumPriorityPeekTask( void *pvParameters );\r
+static void prvHighPriorityPeekTask( void *pvParameters );\r
+static void prvHighestPriorityPeekTask( void *pvParameters );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Flag that will be latched to pdTRUE should any unexpected behaviour be\r
+detected in any of the tasks. */\r
+static portBASE_TYPE xErrorDetected = pdFALSE;\r
+\r
+/* Counter that is incremented on each cycle of a test.  This is used to\r
+detect a stalled task - a test that is no longer running. */\r
+static volatile unsigned portLONG ulLoopCounter = 0;\r
+\r
+/* Handles to the test tasks. */\r
+xTaskHandle xMediumPriorityTask, xHighPriorityTask, xHighestPriorityTask;\r
+/*-----------------------------------------------------------*/\r
+\r
+void vStartQueuePeekTasks( void )\r
+{\r
+xQueueHandle xQueue;\r
+\r
+       /* Create the queue that we are going to use for the test/demo. */\r
+       xQueue = xQueueCreate( qpeekQUEUE_LENGTH, sizeof( unsigned portLONG ) );\r
+\r
+       /* Create the demo tasks and pass it the queue just created.  We are\r
+       passing the queue handle by value so it does not matter that it is declared\r
+       on the stack here. */\r
+       xTaskCreate( prvLowPriorityPeekTask, "PeekLow", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekLOW_PRIORITY, NULL );\r
+       xTaskCreate( prvMediumPriorityPeekTask, "PeekMed", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekMEDIUM_PRIORITY, &xMediumPriorityTask );\r
+       xTaskCreate( prvHighPriorityPeekTask, "PeekHigh", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGH_PRIORITY, &xHighPriorityTask );\r
+       xTaskCreate( prvHighestPriorityPeekTask, "PeekHighest", configMINIMAL_STACK_SIZE, ( void * ) xQueue, qpeekHIGHEST_PRIORITY, &xHighestPriorityTask );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvHighestPriorityPeekTask( void *pvParameters )\r
+{\r
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;\r
+unsigned portLONG ulValue;\r
+\r
+       #ifdef USE_STDIO\r
+       {\r
+               void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\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
+               vPrintDisplayMessage( &pcTaskStartMsg );\r
+       }\r
+       #endif\r
+\r
+       for( ;; )\r
+       {\r
+               /* Try peeking from the queue.  The queue should be empty so we will\r
+               block, allowing the high priority task to execute. */\r
+               if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
+               {\r
+                       /* We expected to have received something by the time we unblock. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* When we reach here the high and medium priority tasks should still\r
+               be blocked on the queue.  We unblocked because the low priority task\r
+               wrote a value to the queue, which we should have peeked.  Peeking the\r
+               data (rather than receiving it) will leave the data on the queue, so\r
+               the high priority task should then have also been unblocked, but not\r
+               yet executed. */\r
+               if( ulValue != 0x11223344 )\r
+               {\r
+                       /* We did not receive the expected value. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( uxQueueMessagesWaiting( xQueue ) != 1 )\r
+               {\r
+                       /* The message should have been left on the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* Now we are going to actually receive the data, so when the high\r
+               priority task runs it will find the queue empty and return to the\r
+               blocked state. */\r
+               ulValue = 0;\r
+               if( xQueueReceive( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
+               {\r
+                       /* We expected to receive the value. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( ulValue != 0x11223344 )\r
+               {\r
+                       /* We did not receive the expected value - which should have been\r
+                       the same value as was peeked. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\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
+                       /* We expected to have received something by the time we unblock. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* When we get here the low priority task should have again written to the\r
+               queue. */\r
+               if( ulValue != 0x01234567 )\r
+               {\r
+                       /* We did not receive the expected value. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( uxQueueMessagesWaiting( xQueue ) != 1 )\r
+               {\r
+                       /* The message should have been left on the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* We only peeked the data, so suspending ourselves now should enable\r
+               the high priority task to also peek the data.  The high priority task\r
+               will have been unblocked when we peeked the data as we left the data\r
+               in the queue. */\r
+               vTaskSuspend( NULL );\r
+\r
+\r
+\r
+               /* This time we are going to do the same as the above test, but the\r
+               high priority task is going to receive the data, rather than peek it.\r
+               This means that the medium priority task should never peek the value. */\r
+               if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
+               {\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( ulValue != 0xaabbaabb )\r
+               {\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               vTaskSuspend( NULL );           \r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvHighPriorityPeekTask( void *pvParameters )\r
+{\r
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;\r
+unsigned portLONG ulValue;\r
+\r
+       for( ;; )\r
+       {\r
+               /* Try peeking from the queue.  The queue should be empty so we will\r
+               block, allowing the medium priority task to execute.  Both the high\r
+               and highest priority tasks will then be blocked on the queue. */\r
+               if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
+               {\r
+                       /* We expected to have received something by the time we unblock. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* When we get here the highest priority task should have peeked the data\r
+               (unblocking this task) then suspended (allowing this task to also peek\r
+               the data). */\r
+               if( ulValue != 0x01234567 )\r
+               {\r
+                       /* We did not receive the expected value. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( uxQueueMessagesWaiting( xQueue ) != 1 )\r
+               {\r
+                       /* The message should have been left on the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* We only peeked the data, so suspending ourselves now should enable\r
+               the medium priority task to also peek the data.  The medium priority task\r
+               will have been unblocked when we peeked the data as we left the data\r
+               in the queue. */\r
+               vTaskSuspend( NULL );\r
+\r
+\r
+               /* This time we are going actually receive the value, so the medium\r
+               priority task will never peek the data - we removed it from the queue. */\r
+               if( xQueueReceive( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
+               {\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( ulValue != 0xaabbaabb )\r
+               {\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               vTaskSuspend( NULL );                           \r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvMediumPriorityPeekTask( void *pvParameters )\r
+{\r
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;\r
+unsigned portLONG ulValue;\r
+\r
+       for( ;; )\r
+       {\r
+               /* Try peeking from the queue.  The queue should be empty so we will\r
+               block, allowing the low priority task to execute.  The highest, high\r
+               and medium priority tasks will then all be blocked on the queue. */\r
+               if( xQueuePeek( xQueue, &ulValue, portMAX_DELAY ) != pdPASS )\r
+               {\r
+                       /* We expected to have received something by the time we unblock. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* When we get here the high priority task should have peeked the data\r
+               (unblocking this task) then suspended (allowing this task to also peek\r
+               the data). */\r
+               if( ulValue != 0x01234567 )\r
+               {\r
+                       /* We did not receive the expected value. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( uxQueueMessagesWaiting( xQueue ) != 1 )\r
+               {\r
+                       /* The message should have been left on the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* Just so we know the test is still running. */\r
+               ulLoopCounter++;\r
+\r
+               /* Now we can suspend ourselves so the low priority task can execute\r
+               again. */\r
+               vTaskSuspend( NULL );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvLowPriorityPeekTask( void *pvParameters )\r
+{\r
+xQueueHandle xQueue = ( xQueueHandle ) pvParameters;\r
+unsigned portLONG ulValue;\r
+\r
+       for( ;; )\r
+       {\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
+               {\r
+                       /* We were expecting the queue to be empty so we should not of\r
+                       had a problem writing to the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* By the time we get here the data should have been removed from\r
+               the queue. */\r
+               if( uxQueueMessagesWaiting( xQueue ) != 0 )\r
+               {\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* Write another value to the queue, again waking the highest priority\r
+               task that is blocked on the queue. */\r
+               ulValue = 0x01234567;\r
+               if( xQueueSendToBack( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
+               {\r
+                       /* We were expecting the queue to be empty so we should not of\r
+                       had a problem writing to the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\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
+               if( xQueueReceive( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
+               {\r
+                       /* We expected to receive the data. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               if( ulValue != 0x01234567 )\r
+               {\r
+                       /* We did not receive the expected value. */\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
+\r
+               /* Unsuspend the other tasks so we can repeat the test - this time\r
+               however not all the other tasks will peek the data as the high\r
+               priority task is actually going to remove it from the queue.  Send\r
+               to front is used just to be different.  As the queue is empty it\r
+               makes no difference to the result. */\r
+               vTaskResume( xMediumPriorityTask );\r
+               vTaskResume( xHighPriorityTask );\r
+               vTaskResume( xHighestPriorityTask );\r
+\r
+               ulValue = 0xaabbaabb;\r
+               if( xQueueSendToFront( xQueue, &ulValue, qpeekNO_BLOCK ) != pdPASS )\r
+               {\r
+                       /* We were expecting the queue to be empty so we should not of\r
+                       had a problem writing to the queue. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\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
+               {\r
+                       /* We expected to receive the data. */\r
+                       xErrorDetected = pdTRUE;\r
+               }\r
+\r
+               /* Unsuspend the highest and high priority tasks so we can go back\r
+               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
+\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
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* This is called to check that all the created tasks are still running. */\r
+portBASE_TYPE xAreQueuePeekTasksStillRunning( void )\r
+{\r
+static unsigned portLONG ulLastLoopCounter = 0;\r
+\r
+       /* If the demo task is still running then we expect the loopcounter to\r
+       have incremented since this function was last called. */\r
+       if( ulLastLoopCounter == ulLoopCounter )\r
+       {\r
+               xErrorDetected = pdTRUE;\r
+       }\r
+\r
+       ulLastLoopCounter = ulLoopCounter;\r
+\r
+       /* Errors detected in the task itself will have latched xErrorDetected\r
+       to true. */\r
+\r
+       return !xErrorDetected;\r
+}\r
+\r
diff --git a/Demo/Common/include/QPeek.h b/Demo/Common/include/QPeek.h
new file mode 100644 (file)
index 0000000..37e4a0e
--- /dev/null
@@ -0,0 +1,45 @@
+/*\r
+       FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along\r
+       with commercial development and support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+#ifndef Q_PEEK_TEST_H\r
+#define Q_PEEK_TEST_H\r
+\r
+void vStartQueuePeekTasks( void );\r
+portBASE_TYPE xAreQueuePeekTasksStillRunning( void );\r
+\r
+#endif /* Q_PEEK_TEST_H */\r
+\r
+\r
+\r
index 6811bbb103cd2abf56da9a57e35aedc7783b7cc1..dfac727b7db78629747d1dc6e0a61ff7de91b115 100644 (file)
@@ -120,6 +120,7 @@ Changes from V3.2.4
 #include "crhook.h"\r
 #include "blocktim.h"\r
 #include "GenQTest.h"\r
+#include "QPeek.h"\r
 \r
 /* Priority definitions for the tasks in the demo application. */\r
 #define mainLED_TASK_PRIORITY          ( tskIDLE_PRIORITY + 1 )\r
@@ -182,6 +183,7 @@ portSHORT main( void )
        vStartSemaphoreTasks( mainSEMAPHORE_TASK_PRIORITY );\r
        vStartDynamicPriorityTasks();\r
        vStartMultiEventTasks();\r
+       vStartQueuePeekTasks();\r
 \r
        /* Create the "Print" task as described at the top of the file. */\r
        xTaskCreate( vErrorChecks, "Print", mainPRINT_STACK_SIZE, NULL, mainPRINT_TASK_PRIORITY, NULL );\r
@@ -399,6 +401,12 @@ static portSHORT sErrorHasOccurred = pdFALSE;
                sErrorHasOccurred = pdTRUE;             \r
        }\r
 \r
+       if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+       {\r
+               vDisplayMessage( "Error in queue peek test task!\r\n" );\r
+               sErrorHasOccurred = pdTRUE;\r
+       }\r
+\r
        if( sErrorHasOccurred == pdFALSE )\r
        {\r
                vDisplayMessage( "OK " );\r
index 53595149daba68d3bca5209ab6c56e220e9bf2dc..ed17eb9a8cae448dd331493d800334aba0702115 100644 (file)
@@ -75,7 +75,7 @@ WVList
 0\r
 19\r
 WPickList\r
-52\r
+53\r
 20\r
 MItem\r
 3\r
@@ -778,8 +778,8 @@ WVList
 0\r
 184\r
 MItem\r
-15\r
-fileio\fileio.c\r
+25\r
+..\COMMON\MINIMAL\QPeek.c\r
 185\r
 WString\r
 4\r
@@ -796,8 +796,8 @@ WVList
 0\r
 188\r
 MItem\r
-6\r
-main.c\r
+15\r
+fileio\fileio.c\r
 189\r
 WString\r
 4\r
@@ -814,8 +814,8 @@ WVList
 0\r
 192\r
 MItem\r
-17\r
-partest\partest.c\r
+6\r
+main.c\r
 193\r
 WString\r
 4\r
@@ -832,8 +832,8 @@ WVList
 0\r
 196\r
 MItem\r
-15\r
-serial\serial.c\r
+17\r
+partest\partest.c\r
 197\r
 WString\r
 4\r
@@ -850,26 +850,26 @@ WVList
 0\r
 200\r
 MItem\r
-3\r
-*.h\r
+15\r
+serial\serial.c\r
 201\r
 WString\r
-3\r
-NIL\r
+4\r
+COBJ\r
 202\r
 WVList\r
 0\r
 203\r
 WVList\r
 0\r
--1\r
+20\r
+1\r
 1\r
-0\r
 0\r
 204\r
 MItem\r
-31\r
-..\..\SOURCE\INCLUDE\croutine.h\r
+3\r
+*.h\r
 205\r
 WString\r
 3\r
@@ -880,14 +880,14 @@ WVList
 207\r
 WVList\r
 0\r
-200\r
-1\r
+-1\r
 1\r
 0\r
+0\r
 208\r
 MItem\r
-27\r
-..\..\source\include\list.h\r
+31\r
+..\..\SOURCE\INCLUDE\croutine.h\r
 209\r
 WString\r
 3\r
@@ -898,14 +898,14 @@ WVList
 211\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 212\r
 MItem\r
-31\r
-..\..\source\include\portable.h\r
+27\r
+..\..\source\include\list.h\r
 213\r
 WString\r
 3\r
@@ -916,14 +916,14 @@ WVList
 215\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 216\r
 MItem\r
 31\r
-..\..\source\include\projdefs.h\r
+..\..\source\include\portable.h\r
 217\r
 WString\r
 3\r
@@ -934,14 +934,14 @@ WVList
 219\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 220\r
 MItem\r
-28\r
-..\..\source\include\queue.h\r
+31\r
+..\..\source\include\projdefs.h\r
 221\r
 WString\r
 3\r
@@ -952,14 +952,14 @@ WVList
 223\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 224\r
 MItem\r
-29\r
-..\..\source\include\semphr.h\r
+28\r
+..\..\source\include\queue.h\r
 225\r
 WString\r
 3\r
@@ -970,14 +970,14 @@ WVList
 227\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 228\r
 MItem\r
-27\r
-..\..\source\include\task.h\r
+29\r
+..\..\source\include\semphr.h\r
 229\r
 WString\r
 3\r
@@ -988,14 +988,14 @@ WVList
 231\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 232\r
 MItem\r
-55\r
-..\..\source\portable\owatcom\16bitdos\common\portasm.h\r
+27\r
+..\..\source\include\task.h\r
 233\r
 WString\r
 3\r
@@ -1006,14 +1006,14 @@ WVList
 235\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 236\r
 MItem\r
-53\r
-..\..\source\portable\owatcom\16bitdos\pc\portmacro.h\r
+55\r
+..\..\source\portable\owatcom\16bitdos\common\portasm.h\r
 237\r
 WString\r
 3\r
@@ -1024,14 +1024,14 @@ WVList
 239\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 240\r
 MItem\r
-26\r
-..\common\include\blockq.h\r
+53\r
+..\..\source\portable\owatcom\16bitdos\pc\portmacro.h\r
 241\r
 WString\r
 3\r
@@ -1042,14 +1042,14 @@ WVList
 243\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 244\r
 MItem\r
-28\r
-..\COMMON\INCLUDE\blocktim.h\r
+26\r
+..\common\include\blockq.h\r
 245\r
 WString\r
 3\r
@@ -1060,14 +1060,14 @@ WVList
 247\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 248\r
 MItem\r
-27\r
-..\common\include\comtest.h\r
+28\r
+..\COMMON\INCLUDE\blocktim.h\r
 249\r
 WString\r
 3\r
@@ -1078,14 +1078,14 @@ WVList
 251\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 252\r
 MItem\r
-26\r
-..\COMMON\INCLUDE\crhook.h\r
+27\r
+..\common\include\comtest.h\r
 253\r
 WString\r
 3\r
@@ -1096,14 +1096,14 @@ WVList
 255\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 256\r
 MItem\r
-25\r
-..\common\include\death.h\r
+26\r
+..\COMMON\INCLUDE\crhook.h\r
 257\r
 WString\r
 3\r
@@ -1114,14 +1114,14 @@ WVList
 259\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 260\r
 MItem\r
-27\r
-..\COMMON\INCLUDE\dynamic.h\r
+25\r
+..\common\include\death.h\r
 261\r
 WString\r
 3\r
@@ -1132,14 +1132,14 @@ WVList
 263\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 264\r
 MItem\r
-26\r
-..\common\include\fileio.h\r
+27\r
+..\COMMON\INCLUDE\dynamic.h\r
 265\r
 WString\r
 3\r
@@ -1150,14 +1150,14 @@ WVList
 267\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 268\r
 MItem\r
-25\r
-..\common\include\flash.h\r
+26\r
+..\common\include\fileio.h\r
 269\r
 WString\r
 3\r
@@ -1168,14 +1168,14 @@ WVList
 271\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 272\r
 MItem\r
-24\r
-..\common\include\flop.h\r
+25\r
+..\common\include\flash.h\r
 273\r
 WString\r
 3\r
@@ -1186,14 +1186,14 @@ WVList
 275\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 276\r
 MItem\r
-28\r
-..\COMMON\INCLUDE\GenQTest.h\r
+24\r
+..\common\include\flop.h\r
 277\r
 WString\r
 3\r
@@ -1204,14 +1204,14 @@ WVList
 279\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 280\r
 MItem\r
-27\r
-..\common\include\partest.h\r
+28\r
+..\COMMON\INCLUDE\GenQTest.h\r
 281\r
 WString\r
 3\r
@@ -1222,14 +1222,14 @@ WVList
 283\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 284\r
 MItem\r
-25\r
-..\common\include\pollq.h\r
+27\r
+..\common\include\partest.h\r
 285\r
 WString\r
 3\r
@@ -1240,14 +1240,14 @@ WVList
 287\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 288\r
 MItem\r
 25\r
-..\common\include\print.h\r
+..\common\include\pollq.h\r
 289\r
 WString\r
 3\r
@@ -1258,14 +1258,14 @@ WVList
 291\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 292\r
 MItem\r
-27\r
-..\common\include\semtest.h\r
+25\r
+..\common\include\print.h\r
 293\r
 WString\r
 3\r
@@ -1276,14 +1276,14 @@ WVList
 295\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 296\r
 MItem\r
-26\r
-..\common\include\serial.h\r
+27\r
+..\common\include\semtest.h\r
 297\r
 WString\r
 3\r
@@ -1294,14 +1294,14 @@ WVList
 299\r
 WVList\r
 0\r
-200\r
+204\r
 1\r
 1\r
 0\r
 300\r
 MItem\r
-16\r
-FreeRTOSConfig.h\r
+26\r
+..\common\include\serial.h\r
 301\r
 WString\r
 3\r
@@ -1312,7 +1312,25 @@ WVList
 303\r
 WVList\r
 0\r
-200\r
+204\r
+1\r
+1\r
+0\r
+304\r
+MItem\r
+16\r
+FreeRTOSConfig.h\r
+305\r
+WString\r
+3\r
+NIL\r
+306\r
+WVList\r
+0\r
+307\r
+WVList\r
+0\r
+204\r
 1\r
 1\r
 0\r
index 25dbb7d795048b7f73e032f0d5e2032774aa3dd4..cd8e9e6556fc0629db0b18717b6e3721aba67375 100644 (file)
@@ -31,7 +31,7 @@ WRect
 0\r
 0\r
 7168\r
-8523\r
+8474\r
 0\r
 0\r
 9\r
@@ -39,5 +39,5 @@ WFileName
 12\r
 rtosdemo.tgt\r
 0\r
-26\r
+24\r
 7\r
index 5bf3b4055fc85d82ddd4903f86c4f8730648fef0..46610e0b7a4f42ab72caff2e2ae856656326a8a2 100644 (file)
@@ -610,7 +610,12 @@ signed portCHAR *pcOriginalReadPosition;
                                        {\r
                                                /* We are not removing the data, so reset our read\r
                                                pointer. */\r
-                                               pxQueue->pcReadFrom = pcOriginalReadPosition;   \r
+                                               pxQueue->pcReadFrom = pcOriginalReadPosition;\r
+\r
+                                               /* The data is being left in the queue, so increment the\r
+                                               lock count so prvUnlockQueue knows to check for other\r
+                                               tasks waiting for the data to be available. */\r
+                                               ++( pxQueue->xTxLock );                                         \r
                                        }\r
                                        \r
                                        xReturn = pdPASS;                                       \r