]> git.sur5r.net Git - freertos/commitdiff
Fix misra violations in queue.c by introducing a union that allows the correct data...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 11 Jun 2018 18:51:53 +0000 (18:51 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 11 Jun 2018 18:51:53 +0000 (18:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2546 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/include/mpu_prototypes.h
FreeRTOS/Source/include/queue.h
FreeRTOS/Source/include/task.h
FreeRTOS/Source/portable/Common/mpu_wrappers.c
FreeRTOS/Source/queue.c
FreeRTOS/Source/tasks.c

index 6b8722110005b08a78be0944a340979b55c8e5e3..656f20b67e5ec78a62dfdbf324986a1db4461d71 100644 (file)
@@ -93,7 +93,7 @@ QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType );
 QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue );\r
 QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount );\r
 QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue );\r
-void* MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore );\r
+TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore );\r
 BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait );\r
 BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex );\r
 void MPU_vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName );\r
index 4a55379ce3b43500bf2528a33e9a3c47e32ac7af..1ef514bbe0b8baa6b6a8cc28d2465c9f7fa0a668 100644 (file)
@@ -1415,8 +1415,8 @@ QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t
 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
-void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\r
-void* xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) 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
index 8b40fcdc2ae1e87fd76644a7167cb340219e8d8c..b217875ca2825d6e3b6a0d3da5fff8ea259aa2c0 100644 (file)
@@ -2321,7 +2321,7 @@ eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;
  * For internal use only.  Increment the mutex held count when a mutex is\r
  * taken and return the handle of the task that has taken the mutex.\r
  */\r
-void *pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;\r
+TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * For internal use only.  Same as vTaskSetTimeOutState(), but without a critial\r
index b08a834117b4934bdc8123d4dc3b1c35aadcc995..b8b80607ae6d442e9a0a224489775b61a417e652 100644 (file)
@@ -632,12 +632,12 @@ BaseType_t xReturn;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-void* MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore )\r
+TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore )\r
 {\r
 BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
 void * xReturn;\r
 \r
-       xReturn = ( void * ) xQueueGetMutexHolder( xSemaphore );\r
+       xReturn = xQueueGetMutexHolder( xSemaphore );\r
        vPortResetPrivilege( xRunningPrivileged );\r
        return xReturn;\r
 }\r
index 1a7ce1be6de7aa2c96a6eaeb1b46918c33c3dc8d..43b792820cae9ab8127a6e42581bf6f8aa42fb04 100644 (file)
@@ -56,17 +56,26 @@ correct privileged Vs unprivileged linkage and placement. */
 pcTail members are used as pointers into the queue storage area.  When the\r
 Queue_t structure is used to represent a mutex pcHead and pcTail pointers are\r
 not necessary, and the pcHead pointer is set to NULL to indicate that the\r
-pcTail pointer actually points to the mutex holder (if any).  Map alternative\r
-names to the pcHead and pcTail structure members to ensure the readability of\r
-the code is maintained despite this dual use of two structure members.  An\r
-alternative implementation would be to use a union, but use of a union is\r
-against the coding standard (although an exception to the standard has been\r
-permitted where the dual use also significantly changes the type of the\r
-structure member). */\r
-#define pxMutexHolder                                  pcTail\r
+structure instead holds a pointer to the mutex holder (if any).  Map alternative\r
+names to the pcHead and structure member to ensure the readability of the code\r
+is maintained.  The QueuePointers_t and SemaphoreData_t types are used to form\r
+a union as their usage is mutually exclusive dependent on what the queue is\r
+being used for. */\r
 #define uxQueueType                                            pcHead\r
 #define queueQUEUE_IS_MUTEX                            NULL\r
 \r
+typedef struct QueuePointers\r
+{\r
+       int8_t *pcTail;                                 /*< Points to the byte at the end of the queue storage area.  Once more byte is allocated than necessary to store the queue items, this is used as a marker. */\r
+       int8_t *pcReadFrom;                             /*< Points to the last place that a queued item was read from when the structure is used as a queue. */\r
+} QueuePointers_t;\r
+\r
+typedef struct SemaphoreData\r
+{\r
+       TaskHandle_t xMutexHolder;               /*< The handle of the task that holds the mutex. */\r
+       UBaseType_t uxRecursiveCallCount;/*< Maintains a count of the number of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */\r
+} SemaphoreData_t;\r
+\r
 /* Semaphores do not actually store or copy data, so have an item size of\r
 zero. */\r
 #define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( ( UBaseType_t ) 0 )\r
@@ -88,13 +97,12 @@ zero. */
 typedef struct QueueDef_t\r
 {\r
        int8_t *pcHead;                                 /*< Points to the beginning of the queue storage area. */\r
-       int8_t *pcTail;                                 /*< Points to the byte at the end of the queue storage area.  Once more byte is allocated than necessary to store the queue items, this is used as a marker. */\r
        int8_t *pcWriteTo;                              /*< Points to the free next place in the storage area. */\r
 \r
-       union                                                   /* Use of a union is an exception to the coding standard to ensure two mutually exclusive structure members don't appear simultaneously (wasting RAM). */\r
+       union\r
        {\r
-               int8_t *pcReadFrom;                     /*< Points to the last place that a queued item was read from when the structure is used as a queue. */\r
-               UBaseType_t uxRecursiveCallCount;/*< Maintains a count of the number of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */\r
+               QueuePointers_t xQueue;         /*< Data required exclusively when this structure is used as a queue. */\r
+               SemaphoreData_t xSemaphore; /*< Data required exclusively when this structure is used as a semaphore. */\r
        } u;\r
 \r
        List_t xTasksWaitingToSend;             /*< List of tasks that are blocked waiting to post onto this queue.  Stored in priority order. */\r
@@ -252,10 +260,10 @@ Queue_t * const pxQueue = xQueue;
 \r
        taskENTER_CRITICAL();\r
        {\r
-               pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );\r
+               pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */\r
                pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;\r
                pxQueue->pcWriteTo = pxQueue->pcHead;\r
-               pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize );\r
+               pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */\r
                pxQueue->cRxLock = queueUNLOCKED;\r
                pxQueue->cTxLock = queueUNLOCKED;\r
 \r
@@ -392,7 +400,8 @@ Queue_t * const pxQueue = xQueue;
                {\r
                        /* Jump past the queue structure to find the location of the queue\r
                        storage area. */\r
-                       pucQueueStorage = ( ( uint8_t * ) pxNewQueue ) + sizeof( Queue_t );\r
+                       pucQueueStorage = ( uint8_t * ) pxNewQueue;\r
+                       pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */\r
 \r
                        #if( configSUPPORT_STATIC_ALLOCATION == 1 )\r
                        {\r
@@ -469,11 +478,11 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
                        correctly for a generic queue, but this function is creating a\r
                        mutex.  Overwrite those members that need to be set differently -\r
                        in particular the information required for priority inheritance. */\r
-                       pxNewQueue->pxMutexHolder = NULL;\r
+                       pxNewQueue->u.xSemaphore.xMutexHolder = NULL;\r
                        pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;\r
 \r
                        /* In case this is a recursive mutex. */\r
-                       pxNewQueue->u.uxRecursiveCallCount = 0;\r
+                       pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;\r
 \r
                        traceCREATE_MUTEX( pxNewQueue );\r
 \r
@@ -527,9 +536,9 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
 \r
 #if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\r
 \r
-       void* xQueueGetMutexHolder( QueueHandle_t xSemaphore )\r
+       TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore )\r
        {\r
-       void *pxReturn;\r
+       TaskHandle_t pxReturn;\r
        Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;\r
 \r
                /* This function is called by xSemaphoreGetMutexHolder(), and should not\r
@@ -541,7 +550,7 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
                {\r
                        if( pxSemaphore->uxQueueType == queueQUEUE_IS_MUTEX )\r
                        {\r
-                               pxReturn = ( void * ) pxSemaphore->pxMutexHolder;\r
+                               pxReturn = pxSemaphore->u.xSemaphore.xMutexHolder;\r
                        }\r
                        else\r
                        {\r
@@ -558,9 +567,9 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
 \r
 #if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\r
 \r
-       void* xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore )\r
+       TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore )\r
        {\r
-       void *pxReturn;\r
+       TaskHandle_t pxReturn;\r
 \r
                configASSERT( xSemaphore );\r
 \r
@@ -569,7 +578,7 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
                not required here. */\r
                if( ( ( Queue_t * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX )\r
                {\r
-                       pxReturn = ( void * ) ( ( Queue_t * ) xSemaphore )->pxMutexHolder;\r
+                       pxReturn = ( ( Queue_t * ) xSemaphore )->u.xSemaphore.xMutexHolder;\r
                }\r
                else\r
                {\r
@@ -591,25 +600,25 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
 \r
                configASSERT( pxMutex );\r
 \r
-               /* If this is the task that holds the mutex then pxMutexHolder will not\r
+               /* If this is the task that holds the mutex then xMutexHolder will not\r
                change outside of this task.  If this task does not hold the mutex then\r
                pxMutexHolder can never coincidentally equal the tasks handle, and as\r
                this is the only condition we are interested in it does not matter if\r
                pxMutexHolder is accessed simultaneously by another task.  Therefore no\r
                mutual exclusion is required to test the pxMutexHolder variable. */\r
-               if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Not a redundant cast as TaskHandle_t is a typedef. */\r
+               if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )\r
                {\r
                        traceGIVE_MUTEX_RECURSIVE( pxMutex );\r
 \r
-                       /* uxRecursiveCallCount cannot be zero if pxMutexHolder is equal to\r
+                       /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to\r
                        the task handle, therefore no underflow check is required.  Also,\r
                        uxRecursiveCallCount is only modified by the mutex holder, and as\r
                        there can only be one, no mutual exclusion is required to modify the\r
                        uxRecursiveCallCount member. */\r
-                       ( pxMutex->u.uxRecursiveCallCount )--;\r
+                       ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;\r
 \r
                        /* Has the recursive call count unwound to 0? */\r
-                       if( pxMutex->u.uxRecursiveCallCount == ( UBaseType_t ) 0 )\r
+                       if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )\r
                        {\r
                                /* Return the mutex.  This will automatically unblock any other\r
                                task that might be waiting to access the mutex. */\r
@@ -651,9 +660,9 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
 \r
                traceTAKE_MUTEX_RECURSIVE( pxMutex );\r
 \r
-               if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */\r
+               if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )\r
                {\r
-                       ( pxMutex->u.uxRecursiveCallCount )++;\r
+                       ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;\r
                        xReturn = pdPASS;\r
                }\r
                else\r
@@ -665,7 +674,7 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT
                        before reaching here. */\r
                        if( xReturn != pdFAIL )\r
                        {\r
-                               ( pxMutex->u.uxRecursiveCallCount )++;\r
+                               ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;\r
                        }\r
                        else\r
                        {\r
@@ -1117,7 +1126,7 @@ Queue_t * const pxQueue = xQueue;
        /* Normally a mutex would not be given from an interrupt, especially if\r
        there is a mutex holder, as priority inheritance makes no sense for an\r
        interrupts, only tasks. */\r
-       configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->pxMutexHolder != NULL ) ) );\r
+       configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->u.xSemaphore.xMutexHolder != NULL ) ) );\r
 \r
        /* RTOS ports that support interrupt nesting have the concept of a maximum\r
        system call (or maximum API call) interrupt priority.  Interrupts that are\r
@@ -1454,7 +1463,7 @@ Queue_t * const pxQueue = xQueue;
                                        {\r
                                                /* Record the information required to implement\r
                                                priority inheritance should it become necessary. */\r
-                                               pxQueue->pxMutexHolder = ( int8_t * ) pvTaskIncrementMutexHeldCount(); /*lint !e961 Cast is not redundant as TaskHandle_t is a typedef. */\r
+                                               pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();\r
                                        }\r
                                        else\r
                                        {\r
@@ -1542,7 +1551,7 @@ Queue_t * const pxQueue = xQueue;
                                        {\r
                                                taskENTER_CRITICAL();\r
                                                {\r
-                                                       xInheritanceOccurred = xTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder );\r
+                                                       xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );\r
                                                }\r
                                                taskEXIT_CRITICAL();\r
                                        }\r
@@ -1601,7 +1610,7 @@ Queue_t * const pxQueue = xQueue;
                                                        again, but only as low as the next highest priority\r
                                                        task that is waiting for the same mutex. */\r
                                                        uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );\r
-                                                       vTaskPriorityDisinheritAfterTimeout( ( void * ) pxQueue->pxMutexHolder, uxHighestWaitingPriority );\r
+                                                       vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );\r
                                                }\r
                                                taskEXIT_CRITICAL();\r
                                        }\r
@@ -1642,10 +1651,9 @@ Queue_t * const pxQueue = xQueue;
        #endif\r
 \r
 \r
-       /* This function relaxes the coding standard somewhat to allow return\r
-       statements within the function itself.  This is done in the interest\r
-       of execution time efficiency. */\r
-\r
+       /*lint -save -e904  This function relaxes the coding standard somewhat to\r
+       allow return statements within the function itself.  This is done in the\r
+       interest of execution time efficiency. */\r
        for( ;; )\r
        {\r
                taskENTER_CRITICAL();\r
@@ -1659,13 +1667,13 @@ Queue_t * const pxQueue = xQueue;
                                /* Remember the read position so it can be reset after the data\r
                                is read from the queue as this function is only peeking the\r
                                data, not removing it. */\r
-                               pcOriginalReadPosition = pxQueue->u.pcReadFrom;\r
+                               pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom;\r
 \r
                                prvCopyDataFromQueue( pxQueue, pvBuffer );\r
                                traceQUEUE_PEEK( pxQueue );\r
 \r
                                /* The data is not being removed, so reset the read pointer. */\r
-                               pxQueue->u.pcReadFrom = pcOriginalReadPosition;\r
+                               pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition;\r
 \r
                                /* The data is being left in the queue, so see if there are\r
                                any other tasks waiting for the data. */\r
@@ -1766,7 +1774,7 @@ Queue_t * const pxQueue = xQueue;
                                mtCOVERAGE_TEST_MARKER();\r
                        }\r
                }\r
-       }\r
+       } /*lint -restore */\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -1897,9 +1905,9 @@ Queue_t * const pxQueue = xQueue;
 \r
                        /* Remember the read position so it can be reset as nothing is\r
                        actually being removed from the queue. */\r
-                       pcOriginalReadPosition = pxQueue->u.pcReadFrom;\r
+                       pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom;\r
                        prvCopyDataFromQueue( pxQueue, pvBuffer );\r
-                       pxQueue->u.pcReadFrom = pcOriginalReadPosition;\r
+                       pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition;\r
 \r
                        xReturn = pdPASS;\r
                }\r
@@ -2075,8 +2083,8 @@ UBaseType_t uxMessagesWaiting;
                        if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )\r
                        {\r
                                /* The mutex is no longer being held. */\r
-                               xReturn = xTaskPriorityDisinherit( ( void * ) pxQueue->pxMutexHolder );\r
-                               pxQueue->pxMutexHolder = NULL;\r
+                               xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );\r
+                               pxQueue->u.xSemaphore.xMutexHolder = NULL;\r
                        }\r
                        else\r
                        {\r
@@ -2089,7 +2097,7 @@ UBaseType_t uxMessagesWaiting;
        {\r
                ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0.  Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */\r
                pxQueue->pcWriteTo += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */\r
-               if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */\r
+               if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */\r
                {\r
                        pxQueue->pcWriteTo = pxQueue->pcHead;\r
                }\r
@@ -2100,11 +2108,11 @@ UBaseType_t uxMessagesWaiting;
        }\r
        else\r
        {\r
-               ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e9087 MISRA exception as the casts are only redundant for some ports.  Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */\r
-               pxQueue->u.pcReadFrom -= pxQueue->uxItemSize;\r
-               if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */\r
+               ( void ) memcpy( ( void * ) pxQueue->u.xQueue.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e9087 !e418 MISRA exception as the casts are only redundant for some ports.  Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes.  Assert checks null pointer only used when length is 0. */\r
+               pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;\r
+               if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */\r
                {\r
-                       pxQueue->u.pcReadFrom = ( pxQueue->pcTail - pxQueue->uxItemSize );\r
+                       pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );\r
                }\r
                else\r
                {\r
@@ -2142,16 +2150,16 @@ static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer
 {\r
        if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )\r
        {\r
-               pxQueue->u.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */\r
-               if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */\r
+               pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */\r
+               if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */\r
                {\r
-                       pxQueue->u.pcReadFrom = pxQueue->pcHead;\r
+                       pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\r
                }\r
                else\r
                {\r
                        mtCOVERAGE_TEST_MARKER();\r
                }\r
-               ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports.  Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0.  Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */\r
+               ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports.  Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0.  Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -2475,17 +2483,17 @@ Queue_t * const pxQueue = xQueue;
                        if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )\r
                        {\r
                                /* Data is available from the queue. */\r
-                               pxQueue->u.pcReadFrom += pxQueue->uxItemSize;\r
-                               if( pxQueue->u.pcReadFrom >= pxQueue->pcTail )\r
+                               pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize;\r
+                               if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail )\r
                                {\r
-                                       pxQueue->u.pcReadFrom = pxQueue->pcHead;\r
+                                       pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\r
                                }\r
                                else\r
                                {\r
                                        mtCOVERAGE_TEST_MARKER();\r
                                }\r
                                --( pxQueue->uxMessagesWaiting );\r
-                               ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\r
+                               ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\r
 \r
                                xReturn = pdPASS;\r
 \r
@@ -2583,17 +2591,17 @@ Queue_t * const pxQueue = xQueue;
                if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )\r
                {\r
                        /* Copy the data from the queue. */\r
-                       pxQueue->u.pcReadFrom += pxQueue->uxItemSize;\r
-                       if( pxQueue->u.pcReadFrom >= pxQueue->pcTail )\r
+                       pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize;\r
+                       if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail )\r
                        {\r
-                               pxQueue->u.pcReadFrom = pxQueue->pcHead;\r
+                               pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\r
                        }\r
                        else\r
                        {\r
                                mtCOVERAGE_TEST_MARKER();\r
                        }\r
                        --( pxQueue->uxMessagesWaiting );\r
-                       ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\r
+                       ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\r
 \r
                        if( ( *pxCoRoutineWoken ) == pdFALSE )\r
                        {\r
index 579874a14a7d90dcde4c3c4820ed6439c73f2ea8..f882a5112b2284a4349ec412557cee4964e5c7ad 100644 (file)
@@ -4426,7 +4426,7 @@ TickType_t uxReturn;
 \r
 #if ( configUSE_MUTEXES == 1 )\r
 \r
-       void *pvTaskIncrementMutexHeldCount( void )\r
+       TaskHandle_t pvTaskIncrementMutexHeldCount( void )\r
        {\r
                /* If xSemaphoreCreateMutex() is called before any tasks have been created\r
                then pxCurrentTCB will be NULL. */\r