Add some assertions and coverage exceptions to queue.c (#273)

* Add an LCOV_BRANCH exception for the check that sizeof( StaticQueue_t ) == sizeof( Queue_t )
* Add LCOV_BRANCH coverage exception for a configASSERT on pxQueueSetContainer with a condition that is unreachable.
* Add configASSERTs to alert when invalid parameters are passed into Queue Registry related functions.
* Assert that the semaphore handle passed into xQueueGetMutexHolder is not NULL.
* Correct some typos in queue.c
* Update lexicon.txt
diff --git a/.github/lexicon.txt b/.github/lexicon.txt
index 9ffef9a..800def7 100644
--- a/.github/lexicon.txt
+++ b/.github/lexicon.txt
@@ -1529,6 +1529,7 @@
 prvinitialisenewtimer
 prvinsertblockintofreelist
 prvlockqueue
+prvnotifyqueuesetcontainer
 prvportmalloc
 prvportresetpic
 prvprocesssimulatedinterrupts
@@ -1631,7 +1632,6 @@
 pwdtc
 pwm
 pwmc
-pxtaskcode
 pxblock
 pxblocktoinsert
 pxcallbackfunction
@@ -1688,6 +1688,7 @@
 pxpreviouswaketime
 pxqueue
 pxqueuebuffer
+pxqueuesetcontainer
 pxramstack
 pxreadycoroutinelists
 pxreadytaskslists
@@ -1707,6 +1708,7 @@
 pxtagvalue
 pxtask
 pxtaskbuffer
+pxtaskcode
 pxtaskdefinition
 pxtaskstatus
 pxtaskstatusarray
@@ -2653,7 +2655,6 @@
 www
 wwwfreertos
 wxr
-xtasktodelete
 xa
 xaa
 xaaaa
@@ -3020,6 +3021,7 @@
 xtaskswaitingtermination
 xtaskswaitingtoreceive
 xtaskswaitingtosend
+xtasktodelete
 xtasktonotify
 xtasktoquery
 xtasktoresume
diff --git a/queue.c b/queue.c
index 7ed8e98..6805cd0 100644
--- a/queue.c
+++ b/queue.c
@@ -342,8 +342,10 @@
                  * variable of type StaticQueue_t or StaticSemaphore_t equals the size of

                  * the real queue and semaphore structures. */

                 volatile size_t xSize = sizeof( StaticQueue_t );

-                configASSERT( xSize == sizeof( Queue_t ) );

-                ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */

+

+                /* This assertion cannot be branch covered in unit tests */

+                configASSERT( xSize == sizeof( Queue_t ) ); /* LCOV_EXCL_BR_LINE */

+                ( void ) xSize;                             /* Keeps lint quiet when configASSERT() is not defined. */

             }

         #endif /* configASSERT_DEFINED */

 

@@ -398,7 +400,7 @@
         configASSERT( ( uxItemSize == 0 ) || ( uxQueueLength == ( xQueueSizeInBytes / uxItemSize ) ) );

 

         /* Check for addition overflow. */

-        configASSERT( ( sizeof( Queue_t ) + xQueueSizeInBytes ) >  xQueueSizeInBytes );

+        configASSERT( ( sizeof( Queue_t ) + xQueueSizeInBytes ) > xQueueSizeInBytes );

 

         /* Allocate the queue and storage area.  Justification for MISRA

          * deviation as follows:  pvPortMalloc() always ensures returned memory

@@ -561,6 +563,8 @@
         TaskHandle_t pxReturn;

         Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;

 

+        configASSERT( xSemaphore );

+

         /* This function is called by xSemaphoreGetMutexHolder(), and should not

          * be called directly.  Note:  This is a good way of determining if the

          * calling task is the mutex holder, but not a good way of determining the

@@ -944,15 +948,15 @@
                 vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );

 

                 /* Unlocking the queue means queue events can effect the

-                 * event list.  It is possible that interrupts occurring now

+                 * event list. It is possible that interrupts occurring now

                  * remove this task from the event list again - but as the

                  * scheduler is suspended the task will go onto the pending

-                 * ready last instead of the actual ready list. */

+                 * ready list instead of the actual ready list. */

                 prvUnlockQueue( pxQueue );

 

                 /* Resuming the scheduler will move tasks from the pending

                  * ready list into the ready list - so it is feasible that this

-                 * task is already in a ready list before it yields - in which

+                 * task is already in the ready list before it yields - in which

                  * case the yield will not cause a context switch unless there

                  * is also a higher priority task in the pending ready list. */

                 if( xTaskResumeAll() == pdFALSE )

@@ -1774,7 +1778,7 @@
         taskEXIT_CRITICAL();

 

         /* Interrupts and other tasks can send to and receive from the queue

-         * now the critical section has been exited. */

+         * now that the critical section has been exited. */

 

         vTaskSuspendAll();

         prvLockQueue( pxQueue );

@@ -2723,6 +2727,9 @@
     {

         UBaseType_t ux;

 

+        configASSERT( xQueue );

+        configASSERT( pcQueueName );

+

         /* See if there is an empty space in the registry.  A NULL name denotes

          * a free slot. */

         for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )

@@ -2753,6 +2760,8 @@
         UBaseType_t ux;

         const char * pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */

 

+        configASSERT( xQueue );

+

         /* Note there is nothing here to protect against another task adding or

          * removing entries from the registry while it is being searched. */

 

@@ -2781,6 +2790,8 @@
     {

         UBaseType_t ux;

 

+        configASSERT( xQueue );

+

         /* See if the handle of the queue being unregistered in actually in the

          * registry. */

         for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )

@@ -2967,7 +2978,10 @@
 

         /* This function must be called form a critical section. */

 

-        configASSERT( pxQueueSetContainer );

+        /* The following line is not reachable in unit tests because every call

+         * to prvNotifyQueueSetContainer is preceded by a check that

+         * pxQueueSetContainer != NULL */

+        configASSERT( pxQueueSetContainer ); /* LCOV_EXCL_BR_LINE */

         configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength );

 

         if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength )