]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/include/queue.h
Linting and MISRA checking
[freertos] / FreeRTOS / Source / include / queue.h
index 7be13adf0a2c54a3172f415740edc724ffd9e175..07bb6d6e37c2a751a4a75332b6a3cf7ba0809571 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.4.1 - Copyright (C) 2013 Real Time Engineers Ltd.\r
+    FreeRTOS V7.4.2 - Copyright (C) 2013 Real Time Engineers Ltd.\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
     ***************************************************************************\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
+    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
+\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
 \r
@@ -85,8 +85,6 @@ extern "C" {
 #endif\r
 \r
 \r
-#include "mpu_wrappers.h"\r
-\r
 /**\r
  * Type by which queues are referenced.  For example, a call to xQueueCreate()\r
  * returns an xQueueHandle variable that can then be used as a parameter to\r
@@ -109,16 +107,17 @@ typedef void * xQueueSetHandle;
 typedef void * xQueueSetMemberHandle;\r
 \r
 /* For internal use only. */\r
-#define        queueSEND_TO_BACK       ( 0 )\r
-#define        queueSEND_TO_FRONT      ( 1 )\r
+#define        queueSEND_TO_BACK               ( ( portBASE_TYPE ) 0 )\r
+#define        queueSEND_TO_FRONT              ( ( portBASE_TYPE ) 1 )\r
+#define queueOVERWRITE                 ( ( portBASE_TYPE ) 2 )\r
 \r
 /* For internal use only.  These definitions *must* match those in queue.c. */\r
-#define queueQUEUE_TYPE_BASE                           ( 0U )\r
-#define queueQUEUE_TYPE_SET                                    ( 0U )\r
-#define queueQUEUE_TYPE_MUTEX                          ( 1U )\r
-#define queueQUEUE_TYPE_COUNTING_SEMAPHORE     ( 2U )\r
-#define queueQUEUE_TYPE_BINARY_SEMAPHORE       ( 3U )\r
-#define queueQUEUE_TYPE_RECURSIVE_MUTEX                ( 4U )\r
+#define queueQUEUE_TYPE_BASE                           ( ( unsigned char ) 0U )\r
+#define queueQUEUE_TYPE_SET                                    ( ( unsigned char ) 0U )\r
+#define queueQUEUE_TYPE_MUTEX                          ( ( unsigned char ) 1U )\r
+#define queueQUEUE_TYPE_COUNTING_SEMAPHORE     ( ( unsigned char ) 2U )\r
+#define queueQUEUE_TYPE_BINARY_SEMAPHORE       ( ( unsigned char ) 3U )\r
+#define queueQUEUE_TYPE_RECURSIVE_MUTEX                ( ( unsigned char ) 4U )\r
 \r
 /**\r
  * queue. h\r
@@ -426,6 +425,88 @@ typedef void * xQueueSetMemberHandle;
  */\r
 #define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )\r
 \r
+/**\r
+ * queue. h\r
+ * <pre>\r
+ portBASE_TYPE xQueueOverwrite(\r
+                                                         xQueueHandle xQueue,\r
+                                                         const void * pvItemToQueue,\r
+                                                );\r
+ * </pre>\r
+ *\r
+ * Only for use with queues that can hold a single item - so the queue is either\r
+ * empty or full.\r
+ *\r
+ * Post an item on a queue.  If the queue is already full then overwrite the\r
+ * value held in the queue.  The item is queued by copy, not by reference.\r
+ * This function must not be called from an interrupt service routine.\r
+ * See xQueueOverwriteFromISR () for an alternative which may be used in an ISR.\r
+ *\r
+ * @param xQueue The handle to the queue on which the item is to be posted.\r
+ *\r
+ * @param pvItemToQueue A pointer to the item that is to be placed on the\r
+ * queue.  The size of the items the queue will hold was defined when the\r
+ * queue was created, so this many bytes will be copied from pvItemToQueue\r
+ * into the queue storage area.\r
+ *\r
+ * @return xQueueOverwrite() is a macro that calls xQueueGenericSend(), and\r
+ * therefore has the same return values as xQueueSendToFront().  However, as\r
+ * xQueueOverwrite() will write to the queue even when the queue is full pdPASS\r
+ * will be returned in all cases (errQUEUE_FULL will never be returned).\r
+ *\r
+ * Example usage:\r
+   <pre>\r
+\r
+ void vFunction( void *pvParameters )\r
+ {\r
+ xQueueHandle xQueue;\r
+ unsigned long ulVarToSend, ulValReceived;\r
+\r
+       // Create a queue to hold one unsigned long value.  It is strongly\r
+       // recommended *not* to use xQueueOverwrite() on queues that can\r
+       // contain more than one value, and doing so will trigger an assertion\r
+       // if configASSERT() is defined.\r
+       xQueue = xQueueCreate( 1, sizeof( unsigned long ) );\r
+\r
+       // Write the value 10 to the queue using xQueueOverwrite().\r
+       ulVarToSend = 10;\r
+       xQueueOverwrite( xQueue, &ulVarToSend );\r
+\r
+       // Peeking the queue should now return 10, but leave the value 10 in\r
+       // the queue.  A block time of zero is used as it is known that the\r
+       // queue holds a value.\r
+       ulValReceived = 0;\r
+       xQueuePeek( xQueue, &ulValReceived, 0 );\r
+\r
+       if( ulValReceived != 10 )\r
+       {\r
+               // Error!\r
+       }\r
+\r
+       // The queue is still full.  Use xQueueOverwrite() to overwrite the\r
+       // value held in the queue with 100.\r
+       ulVarToSend = 100;\r
+       xQueueOverwrite( xQueue, &ulVarToSend );\r
+\r
+       // This time read from the queue, leaving the queue empty once more.\r
+       // A block time of 0 is used again.\r
+       xQueueReceive( xQueue, &ulValReceived, 0 );\r
+\r
+       // The value read should be the last value written, even though the\r
+       // queue was already full when the value was written.\r
+       if( ulValReceived != 100 )\r
+       {\r
+               // Error!\r
+       }\r
+\r
+       // ...\r
+}\r
+ </pre>\r
+ * \defgroup xQueueOverwrite xQueueOverwrite\r
+ * \ingroup QueueManagement\r
+ */\r
+#define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE )\r
+\r
 \r
 /**\r
  * queue. h\r
@@ -512,7 +593,7 @@ typedef void * xQueueSetMemberHandle;
  * \defgroup xQueueSend xQueueSend\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition );\r
+signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -533,7 +614,9 @@ signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const
  * Successfully received items remain on the queue so will be returned again\r
  * by the next call, or a call to xQueueReceive().\r
  *\r
- * This macro must not be used in an interrupt service routine.\r
+ * This macro must not be used in an interrupt service routine.  See\r
+ * xQueuePeekFromISR() for an alternative that can be called from an interrupt\r
+ * service routine.\r
  *\r
  * @param xQueue The handle to the queue from which the item is to be\r
  * received.\r
@@ -608,6 +691,39 @@ signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const
  */\r
 #define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE )\r
 \r
+/**\r
+ * queue. h\r
+ * <pre>\r
+ portBASE_TYPE xQueuePeekFromISR(\r
+                                                                       xQueueHandle xQueue,\r
+                                                                       void *pvBuffer,\r
+                                                               );</pre>\r
+ *\r
+ * A version of xQueuePeek() that can be called from an interrupt service\r
+ * routine (ISR).\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
+ * the queue was created.\r
+ *\r
+ * Successfully received items remain on the queue so will be returned again\r
+ * by the next call, or a call to xQueueReceive().\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
+ * @return pdTRUE if an item was successfully received from the queue,\r
+ * otherwise pdFALSE.\r
+ *\r
+ * \defgroup xQueuePeekFromISR xQueuePeekFromISR\r
+ * \ingroup QueueManagement\r
+ */\r
+signed portBASE_TYPE xQueuePeekFromISR( xQueueHandle xQueue, const void * const pvBuffer ) PRIVILEGED_FUNCTION;\r
+\r
 /**\r
  * queue. h\r
  * <pre>\r
@@ -798,7 +914,7 @@ signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const
  * \defgroup xQueueReceive xQueueReceive\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek );\r
+signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -810,10 +926,10 @@ signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, void * const pvB
  *\r
  * @return The number of messages available in the queue.\r
  *\r
- * \page uxQueueMessagesWaiting uxQueueMessagesWaiting\r
+ * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting\r
  * \ingroup QueueManagement\r
  */\r
-unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );\r
+unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -824,10 +940,10 @@ unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );
  *\r
  * @param xQueue A handle to the queue to be deleted.\r
  *\r
- * \page vQueueDelete vQueueDelete\r
+ * \defgroup vQueueDelete vQueueDelete\r
  * \ingroup QueueManagement\r
  */\r
-void vQueueDelete( xQueueHandle xQueue );\r
+void vQueueDelete( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -970,6 +1086,84 @@ void vQueueDelete( xQueueHandle xQueue );
  */\r
 #define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )\r
 \r
+/**\r
+ * queue. h\r
+ * <pre>\r
+ portBASE_TYPE xQueueOverwriteFromISR(\r
+                                                         xQueueHandle xQueue,\r
+                                                         const void * pvItemToQueue,\r
+                                                         portBASE_TYPE *pxHigherPriorityTaskWoken\r
+                                                );\r
+ * </pre>\r
+ *\r
+ * A version of xQueueOverwrite() that can be used from an interrupt service\r
+ * routine (ISR).\r
+ *\r
+ * Only for use with queues that can hold a single item - so the queue is either\r
+ * empty or full.\r
+ *\r
+ * Post an item on a queue.  If the queue is already full then overwrite the\r
+ * value held in the queue.  The item is queued by copy, not by reference.\r
+ *\r
+ * @param xQueue The handle to the queue on which the item is to be posted.\r
+ *\r
+ * @param pvItemToQueue A pointer to the item that is to be placed on the\r
+ * queue.  The size of the items the queue will hold was defined when the\r
+ * queue was created, so this many bytes will be copied from pvItemToQueue\r
+ * into the queue storage area.\r
+ *\r
+ * @param pxHigherPriorityTaskWoken xQueueOverwriteFromISR() will set\r
+ * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\r
+ * to unblock, and the unblocked task has a priority higher than the currently\r
+ * running task.  If xQueueSendFromISR() sets this value to pdTRUE then\r
+ * a context switch should be requested before the interrupt is exited.\r
+ *\r
+ * @return xQueueOverwriteFromISR() is a macro that calls \r
+ * xQueueGenericSendFromISR(), and therefore has the same return values as \r
+ * xQueueSendToFrontFromISR().  However, as xQueueOverwriteFromISR() will write \r
+ * to the queue even when the queue is full pdPASS will be returned in all cases \r
+ * (errQUEUE_FULL will never be returned).\r
+ *\r
+ * Example usage:\r
+   <pre>\r
+\r
+ xQueueHandle xQueue;\r
\r
+ void vFunction( void *pvParameters )\r
+ {\r
+       // Create a queue to hold one unsigned long value.  It is strongly\r
+       // recommended *not* to use xQueueOverwrite() on queues that can\r
+       // contain more than one value, and doing so will trigger an assertion\r
+       // if configASSERT() is defined.\r
+       xQueue = xQueueCreate( 1, sizeof( unsigned long ) );\r
+}\r
+\r
+void vAnInterruptHandler( void )\r
+{\r
+// xHigherPriorityTaskWoken must be set to pdFALSE before it is used.\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+unsigned long ulVarToSend, ulValReceived;\r
+\r
+       // Write the value 10 to the queue using xQueueOverwriteFromISR().\r
+       ulVarToSend = 10;\r
+       xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );\r
+\r
+       // The queue is full, but calling xQueueOverwriteFromISR() again will still\r
+       // pass because the value held in the queue will be overwritten with the\r
+       // new value.\r
+       ulVarToSend = 100;\r
+       xQueueOverwrite( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );\r
+\r
+       // Reading from the queue will now return 100.\r
+\r
+       // ...\r
+}\r
+ </pre>\r
+ * \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR\r
+ * \ingroup QueueManagement\r
+ */\r
+#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE )\r
+\r
 /**\r
  * queue. h\r
  * <pre>\r
@@ -1120,7 +1314,7 @@ void vQueueDelete( xQueueHandle xQueue );
  * \defgroup xQueueSendFromISR xQueueSendFromISR\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition );\r
+signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION;\r
 \r
 /**\r
  * queue. h\r
@@ -1209,15 +1403,15 @@ signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void *
  * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR\r
  * \ingroup QueueManagement\r
  */\r
-signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken );\r
+signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, const void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Utilities to query queues that are safe to use from an ISR.  These utilities\r
  * should be used only from witin an ISR, or within a critical section.\r
  */\r
-signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue );\r
-signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue );\r
-unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue );\r
+signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
+signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
+unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 \r
 /*\r
@@ -1260,16 +1454,16 @@ signed portBASE_TYPE xQueueCRReceive( xQueueHandle xQueue, void *pvBuffer, portT
  * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling\r
  * these functions directly.\r
  */\r
-xQueueHandle xQueueCreateMutex( unsigned char ucQueueType );\r
-xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount );\r
-void* xQueueGetMutexHolder( xQueueHandle xSemaphore );\r
+xQueueHandle xQueueCreateMutex( unsigned char ucQueueType ) PRIVILEGED_FUNCTION;\r
+xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ) PRIVILEGED_FUNCTION;\r
+void* xQueueGetMutexHolder( xQueueHandle xSemaphore ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * For internal use only.  Use xSemaphoreTakeMutexRecursive() or\r
  * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.\r
  */\r
-portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime );\r
-portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex );\r
+portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Reset a queue back to its original empty state.  pdPASS is returned if the\r
@@ -1299,15 +1493,29 @@ portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex );
  * @param pcName The name to be associated with the handle.  This is the\r
  * name that the kernel aware debugger will display.\r
  */\r
-#if configQUEUE_REGISTRY_SIZE > 0U\r
-       void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName );\r
+#if configQUEUE_REGISTRY_SIZE > 0\r
+       void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ) PRIVILEGED_FUNCTION;\r
+#endif\r
+\r
+/*\r
+ * The registry is provided as a means for kernel aware debuggers to\r
+ * locate queues, semaphores and mutexes.  Call vQueueAddToRegistry() add\r
+ * a queue, semaphore or mutex handle to the registry if you want the handle\r
+ * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to\r
+ * remove the queue, semaphore or mutex from the register.  If you are not using\r
+ * a kernel aware debugger then this function can be ignored.\r
+ *\r
+ * @param xQueue The handle of the queue being removed from the registry.\r
+ */\r
+#if configQUEUE_REGISTRY_SIZE > 0\r
+       void vQueueUnregisterQueue( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\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
  */\r
-xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType );\r
+xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Queue sets provide a mechanism to allow a task to block (pend) on a read\r
@@ -1324,7 +1532,7 @@ xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned
  * semaphore take operation would be successful.\r
  *\r
  * Note 1:  See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html\r
- * for reasons why queue sets are very rarely needed in practice as there are \r
+ * for reasons why queue sets are very rarely needed in practice as there are\r
  * simpler methods of blocking on multiple objects.\r
  *\r
  * Note 2:  Blocking on a queue set that contains a mutex will not cause the\r
@@ -1357,7 +1565,7 @@ xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned
  * @return If the queue set is created successfully then a handle to the created\r
  * queue set is returned.  Otherwise NULL is returned.\r
  */\r
-xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength );\r
+xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Adds a queue or semaphore to a queue set that was previously created by a\r
@@ -1381,10 +1589,10 @@ xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength );
  * queue set because it is already a member of a different queue set then pdFAIL\r
  * is returned.\r
  */\r
-portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet );\r
+portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
- * Removes a queue or semaphore from a queue set.  A queue or semaphore can only \r
+ * Removes a queue or semaphore from a queue set.  A queue or semaphore can only\r
  * be removed from a set if the queue or semaphore is empty.\r
  *\r
  * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\r
@@ -1400,7 +1608,7 @@ portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSet
  * then pdPASS is returned.  If the queue was not in the queue set, or the\r
  * queue (or semaphore) was not empty, then pdFAIL is returned.\r
  */\r
-portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet );\r
+portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * xQueueSelectFromSet() selects from the members of a queue set a queue or\r
@@ -1413,7 +1621,7 @@ portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQue
  * function.\r
  *\r
  * Note 1:  See the documentation on http://wwwFreeRTOS.org/RTOS-queue-sets.html\r
- * for reasons why queue sets are very rarely needed in practice as there are \r
+ * for reasons why queue sets are very rarely needed in practice as there are\r
  * simpler methods of blocking on multiple objects.\r
  *\r
  * Note 2:  Blocking on a queue set that contains a mutex will not cause the\r
@@ -1436,17 +1644,18 @@ portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQue
  * in the queue set that is available, or NULL if no such queue or semaphore\r
  * exists before before the specified block time expires.\r
  */\r
-xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks );\r
+xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * A version of xQueueSelectFromSet() that can be used from an ISR.\r
  */\r
-xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet );\r
+xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;\r
 \r
 /* Not public API functions. */\r
-void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait );\r
-portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue );\r
+void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue ) PRIVILEGED_FUNCTION;\r
 void vQueueSetQueueNumber( xQueueHandle xQueue, unsigned char ucQueueNumber ) PRIVILEGED_FUNCTION;\r
+unsigned char ucQueueGetQueueNumber( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 unsigned char ucQueueGetQueueType( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;\r
 \r
 \r