]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/include/queue.h
Correct code comments that referred to taskYIELD_FROM_ISR to portYIELD_FROM_ISR.
[freertos] / FreeRTOS / Source / include / queue.h
index aa15e325f1f363ea197ddecfd8287ba5dc98679a..b8b6f028ffdf5957d19886b101700949aeeec189 100644 (file)
@@ -1,71 +1,29 @@
 /*\r
-    FreeRTOS V8.2.3 - Copyright (C) 2015 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
-    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
-\r
-    ***************************************************************************\r
-    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
-    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
-    >>!   obliged to provide the source code for proprietary components     !<<\r
-    >>!   outside of the FreeRTOS kernel.                                   !<<\r
-    ***************************************************************************\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.  Full license text is available on the following\r
-    link: http://www.freertos.org/a00114.html\r
-\r
-    ***************************************************************************\r
-     *                                                                       *\r
-     *    FreeRTOS provides completely free yet professionally developed,    *\r
-     *    robust, strictly quality controlled, supported, and cross          *\r
-     *    platform software that is more than just the market leader, it     *\r
-     *    is the industry's de facto standard.                               *\r
-     *                                                                       *\r
-     *    Help yourself get started quickly while simultaneously helping     *\r
-     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
-     *    tutorial book, reference manual, or both:                          *\r
-     *    http://www.FreeRTOS.org/Documentation                              *\r
-     *                                                                       *\r
-    ***************************************************************************\r
-\r
-    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
-    the FAQ page "My application does not run, what could be wrong?".  Have you\r
-    defined configASSERT()?\r
-\r
-    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
-    embedded software for free we request you assist our global community by\r
-    participating in the support forum.\r
-\r
-    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
-    be as productive as possible as early as possible.  Now you can receive\r
-    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
-    Ltd, and the world's leading authority on the world's leading RTOS.\r
-\r
-    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\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.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
-    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
-\r
-    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
-    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
-    licenses offer ticketed support, indemnification and commercial 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
+ * FreeRTOS Kernel V10.2.1\r
+ * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+ * this software and associated documentation files (the "Software"), to deal in\r
+ * the Software without restriction, including without limitation the rights to\r
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+ * the Software, and to permit persons to whom the Software is furnished to do so,\r
+ * subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included in all\r
+ * copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ *\r
+ * http://www.FreeRTOS.org\r
+ * http://aws.amazon.com/freertos\r
+ *\r
+ * 1 tab == 4 spaces!\r
+ */\r
 \r
 \r
 #ifndef QUEUE_H\r
 extern "C" {\r
 #endif\r
 \r
+#include "task.h"\r
 \r
 /**\r
  * Type by which queues are referenced.  For example, a call to xQueueCreate()\r
  * returns an QueueHandle_t variable that can then be used as a parameter to\r
  * xQueueSend(), xQueueReceive(), etc.\r
  */\r
-typedef void * QueueHandle_t;\r
+struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */\r
+typedef struct QueueDefinition * QueueHandle_t;\r
 \r
 /**\r
  * Type by which queue sets are referenced.  For example, a call to\r
  * xQueueCreateSet() returns an xQueueSet variable that can then be used as a\r
  * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc.\r
  */\r
-typedef void * QueueSetHandle_t;\r
+typedef struct QueueDefinition * QueueSetHandle_t;\r
 \r
 /**\r
  * Queue sets can contain both queues and semaphores, so the\r
  * QueueSetMemberHandle_t is defined as a type to be used where a parameter or\r
  * return value can be either an QueueHandle_t or an SemaphoreHandle_t.\r
  */\r
-typedef void * QueueSetMemberHandle_t;\r
+typedef struct QueueDefinition * QueueSetMemberHandle_t;\r
 \r
 /* For internal use only. */\r
 #define        queueSEND_TO_BACK               ( ( BaseType_t ) 0 )\r
@@ -126,16 +86,17 @@ typedef void * QueueSetMemberHandle_t;
  * Creates a new queue instance, and returns a handle by which the new queue\r
  * can be referenced.\r
  *\r
- * Internally, within the FreeRTOS implementation, queue's use two blocks of\r
+ * Internally, within the FreeRTOS implementation, queues use two blocks of\r
  * memory.  The first block is used to hold the queue's data structures.  The\r
  * second block is used to hold items placed into the queue.  If a queue is\r
  * created using xQueueCreate() then both blocks of memory are automatically\r
  * dynamically allocated inside the xQueueCreate() function.  (see\r
  * http://www.freertos.org/a00111.html).  If a queue is created using\r
- * xQueueCreateStatic() then the application writer can instead optionally\r
- * provide the memory that will get used by the queue.  xQueueCreateStatic()\r
- * therefore allows a queue to be created without using any dynamic memory\r
- * allocation.\r
+ * xQueueCreateStatic() then the application writer must provide the memory that\r
+ * will get used by the queue.  xQueueCreateStatic() therefore allows a queue to\r
+ * be created without using any dynamic memory allocation.\r
+ *\r
+ * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html\r
  *\r
  * @param uxQueueLength The maximum number of items that the queue can contain.\r
  *\r
@@ -181,7 +142,9 @@ typedef void * QueueSetMemberHandle_t;
  * \defgroup xQueueCreate xQueueCreate\r
  * \ingroup QueueManagement\r
  */\r
-#define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( uxQueueLength, uxItemSize, NULL, NULL, queueQUEUE_TYPE_BASE )\r
+#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\r
+       #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) )\r
+#endif\r
 \r
 /**\r
  * queue. h\r
@@ -197,16 +160,17 @@ typedef void * QueueSetMemberHandle_t;
  * Creates a new queue instance, and returns a handle by which the new queue\r
  * can be referenced.\r
  *\r
- * Internally, within the FreeRTOS implementation, queue's use two blocks of\r
+ * Internally, within the FreeRTOS implementation, queues use two blocks of\r
  * memory.  The first block is used to hold the queue's data structures.  The\r
  * second block is used to hold items placed into the queue.  If a queue is\r
  * created using xQueueCreate() then both blocks of memory are automatically\r
  * dynamically allocated inside the xQueueCreate() function.  (see\r
  * http://www.freertos.org/a00111.html).  If a queue is created using\r
- * xQueueCreateStatic() then the application writer can instead optionally\r
- * provide the memory that will get used by the queue.  xQueueCreateStatic()\r
- * therefore allows a queue to be created without using any dynamic memory\r
- * allocation.\r
+ * xQueueCreateStatic() then the application writer must provide the memory that\r
+ * will get used by the queue.  xQueueCreateStatic() therefore allows a queue to\r
+ * be created without using any dynamic memory allocation.\r
+ *\r
+ * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html\r
  *\r
  * @param uxQueueLength The maximum number of items that the queue can contain.\r
  *\r
@@ -215,27 +179,17 @@ typedef void * QueueSetMemberHandle_t;
  * that will be copied for each posted item.  Each item on the queue must be\r
  * the same size.\r
  *\r
- * @param pucQueueStorageBuffer If pucQueueStorageBuffer is NULL then the memory\r
- * used to hold items stored in the queue will be allocated dynamically, just as\r
- * when a queue is created using xQueueCreate().  If pxQueueStorageBuffer is not\r
- * NULL then it must point to a uint8_t array that is at least large enough to\r
- * hold the maximum number of items that can be in the queue at any one time -\r
- * which is ( uxQueueLength * uxItemsSize ) bytes.\r
- *\r
- * @param pxQueueBuffer If pxQueueBuffer is NULL then the memory required to\r
- * hold the queue's data structures will be allocated dynamically, just as when\r
- * a queue is created using xQueueCreate().  If pxQueueBuffer is not NULL then\r
- * it must point to a variable of type StaticQueue_t, which will then be used to\r
- * hold the queue's data structure, removing the need for the memory to be\r
- * allocated dynamically.\r
- *\r
- * @return If neither pucQueueStorageBuffer or pxQueueBuffer are NULL, then the\r
- * function will not attempt any dynamic memory allocation, and a handle to the\r
- * created queue will always be returned.  If pucQueueStorageBuffer or\r
- * pxQueueBuffer is NULL then the function will attempt to dynamically allocate\r
- * one of both buffers.  In this case, if the allocation succeeds then a handle\r
- * to the created queue will be returned, and if one of the the allocation fails\r
- * NULL will be returned.\r
+ * @param pucQueueStorageBuffer If uxItemSize is not zero then\r
+ * pucQueueStorageBuffer must point to a uint8_t array that is at least large\r
+ * enough to hold the maximum number of items that can be in the queue at any\r
+ * one time - which is ( uxQueueLength * uxItemsSize ) bytes.  If uxItemSize is\r
+ * zero then pucQueueStorageBuffer can be NULL.\r
+ *\r
+ * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which\r
+ * will be used to hold the queue's data structure.\r
+ *\r
+ * @return If the queue is created then a handle to the created queue is\r
+ * returned.  If pxQueueBuffer is NULL then NULL is returned.\r
  *\r
  * Example usage:\r
    <pre>\r
@@ -266,7 +220,7 @@ typedef void * QueueSetMemberHandle_t;
                                                        &xQueueBuffer ); // The buffer that will hold the queue structure.\r
 \r
        // The queue is guaranteed to be created successfully as no dynamic memory\r
-       // allocation was used.  Therefore xQueue1 is now a handle to a valid queue.\r
+       // allocation is used.  Therefore xQueue1 is now a handle to a valid queue.\r
 \r
        // ... Rest of task code.\r
  }\r
@@ -275,7 +229,7 @@ typedef void * QueueSetMemberHandle_t;
  * \ingroup QueueManagement\r
  */\r
 #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
-       #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) )\r
+       #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) )\r
 #endif /* configSUPPORT_STATIC_ALLOCATION */\r
 \r
 /**\r
@@ -288,8 +242,6 @@ typedef void * QueueSetMemberHandle_t;
                                                           );\r
  * </pre>\r
  *\r
- * This is a macro that calls xQueueGenericSend().\r
- *\r
  * Post an item to the front of a queue.  The item is queued by copy, not by\r
  * reference.  This function must not be called from an interrupt service\r
  * routine.  See xQueueSendFromISR () for an alternative which may be used\r
@@ -702,12 +654,10 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ
  * <pre>\r
  BaseType_t xQueuePeek(\r
                                                         QueueHandle_t xQueue,\r
-                                                        void *pvBuffer,\r
+                                                        void * const pvBuffer,\r
                                                         TickType_t xTicksToWait\r
                                                 );</pre>\r
  *\r
- * This is a macro that calls the xQueueGenericReceive() function.\r
- *\r
  * Receive an item from a queue without removing the item from the queue.\r
  * The item is received by copy so a buffer of adequate size must be\r
  * provided.  The number of bytes copied into the buffer was defined when\r
@@ -788,10 +738,10 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ
        // ... Rest of task code.\r
  }\r
  </pre>\r
- * \defgroup xQueueReceive xQueueReceive\r
+ * \defgroup xQueuePeek xQueuePeek\r
  * \ingroup QueueManagement\r
  */\r
-#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE )\r
+BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -835,8 +785,6 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV
                                                                 TickType_t xTicksToWait\r
                                                        );</pre>\r
  *\r
- * This is a macro that calls the xQueueGenericReceive() function.\r
- *\r
  * Receive an item from a queue.  The item is received by copy so a buffer of\r
  * adequate size must be provided.  The number of bytes copied into the buffer\r
  * was defined when the queue was created.\r
@@ -917,106 +865,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV
  * \defgroup xQueueReceive xQueueReceive\r
  * \ingroup QueueManagement\r
  */\r
-#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE )\r
-\r
-\r
-/**\r
- * queue. h\r
- * <pre>\r
- BaseType_t xQueueGenericReceive(\r
-                                                                          QueueHandle_t        xQueue,\r
-                                                                          void *pvBuffer,\r
-                                                                          TickType_t   xTicksToWait\r
-                                                                          BaseType_t   xJustPeek\r
-                                                                       );</pre>\r
- *\r
- * It is preferred that the macro xQueueReceive() be used rather than calling\r
- * this function directly.\r
- *\r
- * Receive an item from a queue.  The item is received by copy so a buffer of\r
- * adequate size must be provided.  The number of bytes copied into the buffer\r
- * was defined when the queue was created.\r
- *\r
- * This function must not be used in an interrupt service routine.  See\r
- * xQueueReceiveFromISR for an alternative that can.\r
- *\r
- * @param xQueue The handle to the queue from which the item is to be\r
- * received.\r
- *\r
- * @param pvBuffer Pointer to the buffer into which the received item will\r
- * be copied.\r
- *\r
- * @param xTicksToWait The maximum amount of time the task should block\r
- * waiting for an item to receive should the queue be empty at the time\r
- * of the call.         The time is defined in tick periods so the constant\r
- * portTICK_PERIOD_MS should be used to convert to real time if this is required.\r
- * xQueueGenericReceive() will return immediately if the queue is empty and\r
- * xTicksToWait is 0.\r
- *\r
- * @param xJustPeek When set to true, the item received from the queue is not\r
- * actually removed from the queue - meaning a subsequent call to\r
- * xQueueReceive() will return the same item.  When set to false, the item\r
- * being received from the queue is also removed from the queue.\r
- *\r
- * @return pdTRUE if an item was successfully received from the queue,\r
- * otherwise pdFALSE.\r
- *\r
- * Example usage:\r
-   <pre>\r
- struct AMessage\r
- {\r
-       char ucMessageID;\r
-       char ucData[ 20 ];\r
- } xMessage;\r
-\r
- QueueHandle_t xQueue;\r
-\r
- // Task to create a queue and post a value.\r
- void vATask( void *pvParameters )\r
- {\r
- struct AMessage *pxMessage;\r
-\r
-       // Create a queue capable of containing 10 pointers to AMessage structures.\r
-       // These should be passed by pointer as they contain a lot of data.\r
-       xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );\r
-       if( xQueue == 0 )\r
-       {\r
-               // Failed to create the queue.\r
-       }\r
-\r
-       // ...\r
-\r
-       // Send a pointer to a struct AMessage object.  Don't block if the\r
-       // queue is already full.\r
-       pxMessage = & xMessage;\r
-       xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );\r
-\r
-       // ... Rest of task code.\r
- }\r
-\r
- // Task to receive from the queue.\r
- void vADifferentTask( void *pvParameters )\r
- {\r
- struct AMessage *pxRxedMessage;\r
-\r
-       if( xQueue != 0 )\r
-       {\r
-               // Receive a message on the created queue.  Block for 10 ticks if a\r
-               // message is not immediately available.\r
-               if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )\r
-               {\r
-                       // pcRxedMessage now points to the struct AMessage variable posted\r
-                       // by vATask.\r
-               }\r
-       }\r
-\r
-       // ... Rest of task code.\r
- }\r
- </pre>\r
- * \defgroup xQueueReceive xQueueReceive\r
- * \ingroup QueueManagement\r
- */\r
-BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION;\r
+BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -1435,7 +1284,7 @@ uint32_t ulVarToSend, ulValReceived;
        // name of the yield function required is port specific.\r
        if( xHigherPriorityTaskWokenByPost )\r
        {\r
-               taskYIELD_YIELD_FROM_ISR();\r
+               portYIELD_FROM_ISR();\r
        }\r
  }\r
  </pre>\r
@@ -1543,28 +1392,6 @@ BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FU
 BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\r
 UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\r
 \r
-\r
-/*\r
- * xQueueAltGenericSend() is an alternative version of xQueueGenericSend().\r
- * Likewise xQueueAltGenericReceive() is an alternative version of\r
- * xQueueGenericReceive().\r
- *\r
- * The source code that implements the alternative (Alt) API is much\r
- * simpler     because it executes everything from within a critical section.\r
- * This is     the approach taken by many other RTOSes, but FreeRTOS.org has the\r
- * preferred fully featured API too.  The fully featured API has more\r
- * complex     code that takes longer to execute, but makes much less use of\r
- * critical sections.  Therefore the alternative API sacrifices interrupt\r
- * responsiveness to gain execution speed, whereas the fully featured API\r
- * sacrifices execution speed to ensure better interrupt responsiveness.\r
- */\r
-BaseType_t xQueueAltGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;\r
-BaseType_t xQueueAltGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking ) PRIVILEGED_FUNCTION;\r
-#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT )\r
-#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )\r
-#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE )\r
-#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE )\r
-\r
 /*\r
  * The functions defined above are for passing data to and from tasks.  The\r
  * functions below are the equivalents for passing data to and from\r
@@ -1584,16 +1411,20 @@ BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTi
  * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling\r
  * these functions directly.\r
  */\r
-QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;\r
-QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;\r
-void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\r
+QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\r
+QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;\r
+QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;\r
+QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;\r
+BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\r
+TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\r
+TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * For internal use only.  Use xSemaphoreTakeMutexRecursive() or\r
  * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.\r
  */\r
 BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\r
-BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION;\r
+BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Reset a queue back to its original empty state.  The return value is now\r
@@ -1624,7 +1455,7 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION
  * preferably in ROM/Flash), not on the stack.\r
  */\r
 #if( configQUEUE_REGISTRY_SIZE > 0 )\r
-       void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */\r
+       void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */\r
 #endif\r
 \r
 /*\r
@@ -1642,8 +1473,8 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION
 #endif\r
 \r
 /*\r
- * The registry is provided as a means for kernel aware debuggers to\r
- * locate queues, semaphores and mutexes.  Call pcQueueGetQueueName() to look\r
+ * The queue registry is provided as a means for kernel aware debuggers to\r
+ * locate queues, semaphores and mutexes.  Call pcQueueGetName() to look\r
  * up and return the name of a queue in the queue registry from the queue's\r
  * handle.\r
  *\r
@@ -1653,14 +1484,26 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION
  * returned.\r
  */\r
 #if( configQUEUE_REGISTRY_SIZE > 0 )\r
-       const char *pcQueueGetQueueName( QueueHandle_t xQueue ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */\r
+       const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */\r
 #endif\r
 \r
 /*\r
- * Generic version of the queue creation function, which is in turn called by\r
- * any queue, semaphore or mutex creation function or macro.\r
+ * Generic version of the function used to creaet a queue using dynamic memory\r
+ * allocation.  This is called by other functions and macros that create other\r
+ * RTOS objects that use the queue structure as their base.\r
  */\r
-QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\r
+#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\r
+       QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\r
+#endif\r
+\r
+/*\r
+ * Generic version of the function used to creaet a queue using dynamic memory\r
+ * allocation.  This is called by other functions and macros that create other\r
+ * RTOS objects that use the queue structure as their base.\r
+ */\r
+#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
+       QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\r
+#endif\r
 \r
 /*\r
  * Queue sets provide a mechanism to allow a task to block (pend) on a read\r