]> git.sur5r.net Git - freertos/blobdiff - Source/queue.c
Revert the CM0 port layer exception handler names to the traditional FreeRTOS names...
[freertos] / Source / queue.c
index ec6bc59fb4d526359ce957decbdf6ab933790da7..19c51d759c68901338649b096fb95a5500ea39ac 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V7.0.2 - Copyright (C) 2011 Real Time Engineers Ltd.\r
+    FreeRTOS V7.1.0 - Copyright (C) 2011 Real Time Engineers Ltd.\r
 \r
 \r
     ***************************************************************************\r
@@ -161,7 +161,9 @@ signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle pxQueue ) PRIV
 unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle pxQueue ) PRIVILEGED_FUNCTION;\r
 void vQueueWaitForMessageRestricted( xQueueHandle pxQueue, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;\r
 unsigned char ucQueueGetQueueNumber( xQueueHandle pxQueue ) PRIVILEGED_FUNCTION;\r
+void vQueueSetQueueNumber( xQueueHandle pxQueue, unsigned char ucQueueNumber ) PRIVILEGED_FUNCTION;\r
 unsigned char ucQueueGetQueueType( xQueueHandle pxQueue ) PRIVILEGED_FUNCTION;\r
+portBASE_TYPE xQueueGenericReset( xQueueHandle pxQueue, portBASE_TYPE xNewQueue ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Co-routine queue functions differ from task queue functions.  Co-routines are\r
@@ -260,6 +262,45 @@ static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void *pvBuffer )
  * PUBLIC QUEUE MANAGEMENT API documented in queue.h\r
  *----------------------------------------------------------*/\r
 \r
+portBASE_TYPE xQueueGenericReset( xQueueHandle pxQueue, portBASE_TYPE xNewQueue )\r
+{\r
+portBASE_TYPE xReturn = pdPASS;\r
+\r
+       configASSERT( pxQueue );\r
+\r
+       /* If the queue being reset has already been used (has not just been\r
+       created), then only reset the queue if its event lists are empty. */\r
+       if( xNewQueue != pdTRUE )\r
+       {\r
+               if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\r
+               {\r
+                       xReturn = pdFAIL;\r
+               }\r
+\r
+               if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\r
+               {\r
+                       xReturn = pdFAIL;\r
+               }\r
+       }\r
+\r
+       if( xReturn == pdPASS )\r
+       {\r
+               pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );\r
+               pxQueue->uxMessagesWaiting = ( unsigned portBASE_TYPE ) 0U;\r
+               pxQueue->pcWriteTo = pxQueue->pcHead;\r
+               pxQueue->pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( unsigned portBASE_TYPE ) 1U ) * pxQueue->uxItemSize );\r
+               pxQueue->xRxLock = queueUNLOCKED;\r
+               pxQueue->xTxLock = queueUNLOCKED;\r
+\r
+               /* Ensure the event queues start with the correct state. */\r
+               vListInitialise( &( pxQueue->xTasksWaitingToSend ) );\r
+               vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType )\r
 {\r
 xQUEUE *pxNewQueue;\r
@@ -285,24 +326,15 @@ xQueueHandle xReturn = NULL;
                        {\r
                                /* Initialise the queue members as described above where the\r
                                queue type is defined. */\r
-                               pxNewQueue->pcTail = pxNewQueue->pcHead + ( uxQueueLength * uxItemSize );\r
-                               pxNewQueue->uxMessagesWaiting = ( unsigned portBASE_TYPE ) 0U;\r
-                               pxNewQueue->pcWriteTo = pxNewQueue->pcHead;\r
-                               pxNewQueue->pcReadFrom = pxNewQueue->pcHead + ( ( uxQueueLength - ( unsigned portBASE_TYPE ) 1U ) * uxItemSize );\r
                                pxNewQueue->uxLength = uxQueueLength;\r
                                pxNewQueue->uxItemSize = uxItemSize;\r
-                               pxNewQueue->xRxLock = queueUNLOCKED;\r
-                               pxNewQueue->xTxLock = queueUNLOCKED;\r
+                               xQueueGenericReset( pxNewQueue, pdTRUE );\r
                                #if ( configUSE_TRACE_FACILITY == 1 )\r
                                {\r
                                        pxNewQueue->ucQueueType = ucQueueType;\r
                                }\r
                                #endif /* configUSE_TRACE_FACILITY */\r
 \r
-                               /* Likewise ensure the event queues start with the correct state. */\r
-                               vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) );\r
-                               vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) );\r
-\r
                                traceQUEUE_CREATE( pxNewQueue );\r
                                xReturn = pxNewQueue;\r
                        }\r
@@ -1128,6 +1160,16 @@ void vQueueDelete( xQueueHandle pxQueue )
 #endif\r
 /*-----------------------------------------------------------*/\r
 \r
+#if ( configUSE_TRACE_FACILITY == 1 )\r
+\r
+       void vQueueSetQueueNumber( xQueueHandle pxQueue, unsigned char ucQueueNumber )\r
+       {\r
+               pxQueue->ucQueueNumber = ucQueueNumber;\r
+       }\r
+\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
 #if ( configUSE_TRACE_FACILITY == 1 )\r
 \r
        unsigned char ucQueueGetQueueType( xQueueHandle pxQueue )\r