]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/Common/Minimal/GenQTest.c
Update the demo directory to use the version 8 type naming conventions.
[freertos] / FreeRTOS / Demo / Common / Minimal / GenQTest.c
index 926d0ed3781829069734f44dc6e903c843d611e9..620a8b472066d0d066514eb45bdd1069ef3a7dba 100644 (file)
@@ -1,48 +1,38 @@
 /*\r
-    FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.\r
+    FreeRTOS V8.0.0:rc1 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
 \r
-    FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT\r
-    http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
 \r
     ***************************************************************************\r
      *                                                                       *\r
-     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
-     *    Complete, revised, and edited pdf reference manuals are also       *\r
-     *    available.                                                         *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
      *                                                                       *\r
-     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
-     *    ensuring you get running as quickly as possible and with an        *\r
-     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
-     *    the FreeRTOS project to continue with its mission of providing     *\r
-     *    professional grade, cross platform, de facto standard solutions    *\r
-     *    for microcontrollers - completely free of charge!                  *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
      *                                                                       *\r
-     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
-     *                                                                       *\r
-     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
+     *    Thank you!                                                         *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-\r
     This file is part of the FreeRTOS distribution.\r
 \r
     FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
 \r
-    >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to\r
-    distribute a combined work that includes FreeRTOS without being obliged to\r
-    provide the source code for proprietary components outside of the FreeRTOS\r
-    kernel.\r
+    >>! NOTE: The modification to the GPL is included to allow you to distribute\r
+    >>! a combined work that includes FreeRTOS without being obliged to provide\r
+    >>! the source code for proprietary components outside of the FreeRTOS\r
+    >>! kernel.\r
 \r
     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
-    FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
-    details. You should have received a copy of the GNU General Public License\r
-    and the FreeRTOS license exception along with FreeRTOS; if not itcan be\r
-    viewed here: http://www.freertos.org/a00114.html and also obtained by\r
-    writing to Real Time Engineers Ltd., contact details for whom are available\r
-    on the FreeRTOS WEB site.\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
 \r
     1 tab == 4 spaces!\r
 \r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-\r
-    http://www.FreeRTOS.org - Documentation, books, training, latest versions, \r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
     license and Real Time Engineers Ltd. contact details.\r
 \r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
-    including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
-    fully thread aware and reentrant UDP/IP stack.\r
-\r
-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High \r
-    Integrity Systems, who sell the code with commercial support, \r
-    indemnification and middleware, under the OpenRTOS brand.\r
-    \r
-    http://www.SafeRTOS.com - High Integrity Systems also provide a safety \r
-    engineered and independently SIL3 certified version for use in safety and \r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
     mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\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
@@ -134,79 +125,79 @@ static void prvHighPriorityMutexTask( void *pvParameters );
 \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
+static volatile portBASE_TYPE xErrorDetected = pdFALSE;\r
 \r
 /* Counters that are 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
-static volatile unsigned portLONG ulLoopCounter2 = 0;\r
+static volatile unsigned long ulLoopCounter = 0;\r
+static volatile unsigned long ulLoopCounter2 = 0;\r
 \r
 /* The variable that is guarded by the mutex in the mutex demo tasks. */\r
-static volatile unsigned portLONG ulGuardedVariable = 0;\r
+static volatile unsigned long ulGuardedVariable = 0;\r
 \r
 /* Handles used in the mutext test to suspend and resume the high and medium\r
 priority mutex test tasks. */\r
-static xTaskHandle xHighPriorityMutexTask, xMediumPriorityMutexTask;\r
+static TaskHandle_t xHighPriorityMutexTask, xMediumPriorityMutexTask;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
 void vStartGenericQueueTasks( unsigned portBASE_TYPE uxPriority )\r
 {\r
-xQueueHandle xQueue;\r
-xSemaphoreHandle xMutex;\r
+QueueHandle_t xQueue;\r
+SemaphoreHandle_t xMutex;\r
 \r
        /* Create the queue that we are going to use for the\r
        prvSendFrontAndBackTest demo. */\r
-       xQueue = xQueueCreate( genqQUEUE_LENGTH, sizeof( unsigned portLONG ) );\r
+       xQueue = xQueueCreate( genqQUEUE_LENGTH, sizeof( unsigned long ) );\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
+       vQueueAddToRegistry( xQueue, "Gen_Queue_Test" );\r
 \r
        /* Create the demo task and pass it the queue just created.  We are\r
        passing the queue handle by value so it does not matter that it is\r
        declared on the stack here. */\r
-       xTaskCreate( prvSendFrontAndBackTest, ( signed portCHAR * )"GenQ", configMINIMAL_STACK_SIZE, ( void * ) xQueue, uxPriority, NULL );\r
+       xTaskCreate( prvSendFrontAndBackTest, "GenQ", configMINIMAL_STACK_SIZE, ( void * ) xQueue, uxPriority, NULL );\r
 \r
        /* Create the mutex used by the prvMutexTest task. */\r
        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
+       vQueueAddToRegistry( ( QueueHandle_t ) xMutex, "Gen_Queue_Mutex" );\r
 \r
        /* Create the mutex demo tasks and pass it the mutex just created.  We are\r
        passing the mutex handle by value so it does not matter that it is declared\r
        on the stack here. */\r
-       xTaskCreate( prvLowPriorityMutexTask, ( signed portCHAR * )"MuLow", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_LOW_PRIORITY, NULL );\r
-       xTaskCreate( prvMediumPriorityMutexTask, ( signed portCHAR * )"MuMed", configMINIMAL_STACK_SIZE, NULL, genqMUTEX_MEDIUM_PRIORITY, &xMediumPriorityMutexTask );\r
-       xTaskCreate( prvHighPriorityMutexTask, ( signed portCHAR * )"MuHigh", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_HIGH_PRIORITY, &xHighPriorityMutexTask );\r
+       xTaskCreate( prvLowPriorityMutexTask, "MuLow", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_LOW_PRIORITY, NULL );\r
+       xTaskCreate( prvMediumPriorityMutexTask, "MuMed", configMINIMAL_STACK_SIZE, NULL, genqMUTEX_MEDIUM_PRIORITY, &xMediumPriorityMutexTask );\r
+       xTaskCreate( prvHighPriorityMutexTask, "MuHigh", configMINIMAL_STACK_SIZE, ( void * ) xMutex, genqMUTEX_HIGH_PRIORITY, &xHighPriorityMutexTask );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 static void prvSendFrontAndBackTest( void *pvParameters )\r
 {\r
-unsigned portLONG ulData, ulData2;\r
-xQueueHandle xQueue;\r
+unsigned long ulData, ulData2;\r
+QueueHandle_t xQueue;\r
 \r
        #ifdef USE_STDIO\r
-       void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\r
-       \r
-               const portCHAR * const pcTaskStartMsg = "Queue SendToFront/SendToBack/Peek test started.\r\n";\r
+       void vPrintDisplayMessage( const char * const * ppcMessageToSend );\r
+\r
+               const char * const pcTaskStartMsg = "Queue SendToFront/SendToBack/Peek test started.\r\n";\r
 \r
                /* Queue a message for printing to say the task has started. */\r
                vPrintDisplayMessage( &pcTaskStartMsg );\r
        #endif\r
 \r
-       xQueue = ( xQueueHandle ) pvParameters;\r
+       xQueue = ( QueueHandle_t ) pvParameters;\r
 \r
        for( ;; )\r
        {\r
@@ -321,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
@@ -422,12 +413,12 @@ xQueueHandle xQueue;
 \r
 static void prvLowPriorityMutexTask( void *pvParameters )\r
 {\r
-xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;\r
+SemaphoreHandle_t xMutex = ( SemaphoreHandle_t ) pvParameters;\r
 \r
        #ifdef USE_STDIO\r
-       void vPrintDisplayMessage( const portCHAR * const * ppcMessageToSend );\r
-       \r
-               const portCHAR * const pcTaskStartMsg = "Mutex with priority inheritance test started.\r\n";\r
+       void vPrintDisplayMessage( const char * const * ppcMessageToSend );\r
+\r
+               const char * const pcTaskStartMsg = "Mutex with priority inheritance test started.\r\n";\r
 \r
                /* Queue a message for printing to say the task has started. */\r
                vPrintDisplayMessage( &pcTaskStartMsg );\r
@@ -455,6 +446,18 @@ 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
+               {\r
+                       configASSERT( eTaskGetState( xHighPriorityMutexTask ) == eBlocked );\r
+               }\r
+               #endif /* INCLUDE_eTaskGetState */\r
+\r
                /* We should now have inherited the prioritoy of the high priority task,\r
                as by now it will have attempted to get the mutex. */\r
                if( uxTaskPriorityGet( NULL ) != genqMUTEX_HIGH_PRIORITY )\r
@@ -491,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
@@ -513,7 +520,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
 \r
                #if configUSE_PREEMPTION == 0\r
                        taskYIELD();\r
-               #endif          \r
+               #endif\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -538,7 +545,7 @@ static void prvMediumPriorityMutexTask( void *pvParameters )
 \r
 static void prvHighPriorityMutexTask( void *pvParameters )\r
 {\r
-xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;\r
+SemaphoreHandle_t xMutex = ( SemaphoreHandle_t ) pvParameters;\r
 \r
        for( ;; )\r
        {\r
@@ -559,7 +566,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
                if( xSemaphoreGive( xMutex ) != pdPASS )\r
                {\r
                        xErrorDetected = pdTRUE;\r
-               }               \r
+               }\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -567,7 +574,7 @@ xSemaphoreHandle xMutex = ( xSemaphoreHandle ) pvParameters;
 /* This is called to check that all the created tasks are still running. */\r
 portBASE_TYPE xAreGenericQueueTasksStillRunning( void )\r
 {\r
-static unsigned portLONG ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;\r
+static unsigned long ulLastLoopCounter = 0, ulLastLoopCounter2 = 0;\r
 \r
        /* If the demo task is still running then we expect the loopcounters to\r
        have incremented since this function was last called. */\r
@@ -582,12 +589,12 @@ 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
 \r
-       return !xErrorDetected;\r
+       return ( portBASE_TYPE ) !xErrorDetected;\r
 }\r
 \r
 \r