forked from epagris/FreeRTOS-Kernel
		
	Add configUSE_MINI_LIST_ITEM configuration option to enable the MiniListItem_t type. (#433)
* Add configUSE_MINI_LIST_ITEM configuration option to enable the MiniListItem_t type. When configUSE_MINI_LIST_ITEM == 0: MiniListItem_t and ListItem_t are both typedefs of struct xLIST_ITEM. When configUSE_MINI_LIST_ITEM == 1 (the default in projdefs.h): MiniListItem_t is a typedef of struct xMINI_LIST_ITEM, which contains 3 fewer fields than a struct xLIST_ITEM. This configuration saves approximately sizeof(TickType_t) + 2 * sizeof( void * ) bytes of ram, however it also violates strict aliasing rules which some compilers depend on for optimization. configUSE_MINI_LIST_ITEM defaults to 1 when not defined. * Add pp_indent_brace option to uncrustify config Improves compliance with the FreeRTOS code style guide: https://www.freertos.org/FreeRTOS-Coding-Standard-and-Style-Guide.html
This commit is contained in:
		
							parent
							
								
									043c2c7ef6
								
							
						
					
					
						commit
						dca4f80a6b
					
				
							
								
								
									
										1
									
								
								.github/uncrustify.cfg
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/uncrustify.cfg
									
									
									
									
										vendored
									
									
								
							@ -157,4 +157,5 @@ pp_indent_at_level              = true     # false/true
 | 
			
		||||
pp_indent_count                 = 4        # unsigned number
 | 
			
		||||
pp_space                        = remove   # ignore/add/remove/force
 | 
			
		||||
pp_if_indent_code               = true     # false/true
 | 
			
		||||
pp_indent_brace                 = false    # true/false
 | 
			
		||||
# option(s) with 'not default' value: 158
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,12 @@ Documentation and download available at https://www.FreeRTOS.org/
 | 
			
		||||
	  The new function xTimerGetAutoReload() provides the auto-reload state as
 | 
			
		||||
	  a BaseType_t.  The legacy function uxTimerGetAutoReload is retained with the
 | 
			
		||||
	  original UBaseType_t return value.
 | 
			
		||||
	+ Introduce the configUSE_MINI_LIST_ITEM configuration option. When this
 | 
			
		||||
	  option is set to 1, ListItem_t and MiniLitItem_t remain separate types.
 | 
			
		||||
	  However, when configUSE_MINI_LIST_ITEM == 0, MiniLitItem_t and ListItem_t
 | 
			
		||||
	  are both typedefs of the same struct xLIST_ITEM. This addresses some issues
 | 
			
		||||
	  observed when strict-aliasing and link time optimization are enabled.
 | 
			
		||||
	  To maintain backwards compatibility, configUSE_MINI_LIST_ITEM defaults to 1.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Changes between FreeRTOS V10.4.4 and FreeRTOS V10.4.5 released September 10 2021
 | 
			
		||||
 | 
			
		||||
@ -101,13 +101,13 @@ static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits,
 | 
			
		||||
        configASSERT( pxEventGroupBuffer );
 | 
			
		||||
 | 
			
		||||
        #if ( configASSERT_DEFINED == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                 * variable of type StaticEventGroup_t equals the size of the real
 | 
			
		||||
                 * event group structure. */
 | 
			
		||||
                volatile size_t xSize = sizeof( StaticEventGroup_t );
 | 
			
		||||
                configASSERT( xSize == sizeof( EventGroup_t ) );
 | 
			
		||||
            } /*lint !e529 xSize is referenced if configASSERT() is defined. */
 | 
			
		||||
        {
 | 
			
		||||
            /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
             * variable of type StaticEventGroup_t equals the size of the real
 | 
			
		||||
             * event group structure. */
 | 
			
		||||
            volatile size_t xSize = sizeof( StaticEventGroup_t );
 | 
			
		||||
            configASSERT( xSize == sizeof( EventGroup_t ) );
 | 
			
		||||
        } /*lint !e529 xSize is referenced if configASSERT() is defined. */
 | 
			
		||||
        #endif /* configASSERT_DEFINED */
 | 
			
		||||
 | 
			
		||||
        /* The user has provided a statically allocated event group - use it. */
 | 
			
		||||
@ -119,12 +119,12 @@ static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits,
 | 
			
		||||
            vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );
 | 
			
		||||
 | 
			
		||||
            #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Both static and dynamic allocation can be used, so note that
 | 
			
		||||
                     * this event group was created statically in case the event group
 | 
			
		||||
                     * is later deleted. */
 | 
			
		||||
                    pxEventBits->ucStaticallyAllocated = pdTRUE;
 | 
			
		||||
                }
 | 
			
		||||
            {
 | 
			
		||||
                /* Both static and dynamic allocation can be used, so note that
 | 
			
		||||
                 * this event group was created statically in case the event group
 | 
			
		||||
                 * is later deleted. */
 | 
			
		||||
                pxEventBits->ucStaticallyAllocated = pdTRUE;
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
 | 
			
		||||
 | 
			
		||||
            traceEVENT_GROUP_CREATE( pxEventBits );
 | 
			
		||||
@ -170,12 +170,12 @@ static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits,
 | 
			
		||||
            vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );
 | 
			
		||||
 | 
			
		||||
            #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Both static and dynamic allocation can be used, so note this
 | 
			
		||||
                     * event group was allocated statically in case the event group is
 | 
			
		||||
                     * later deleted. */
 | 
			
		||||
                    pxEventBits->ucStaticallyAllocated = pdFALSE;
 | 
			
		||||
                }
 | 
			
		||||
            {
 | 
			
		||||
                /* Both static and dynamic allocation can be used, so note this
 | 
			
		||||
                 * event group was allocated statically in case the event group is
 | 
			
		||||
                 * later deleted. */
 | 
			
		||||
                pxEventBits->ucStaticallyAllocated = pdFALSE;
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configSUPPORT_STATIC_ALLOCATION */
 | 
			
		||||
 | 
			
		||||
            traceEVENT_GROUP_CREATE( pxEventBits );
 | 
			
		||||
@ -204,9 +204,9 @@ EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,
 | 
			
		||||
    configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
 | 
			
		||||
    configASSERT( uxBitsToWaitFor != 0 );
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    vTaskSuspendAll();
 | 
			
		||||
@ -331,9 +331,9 @@ EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
 | 
			
		||||
    configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
 | 
			
		||||
    configASSERT( uxBitsToWaitFor != 0 );
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    vTaskSuspendAll();
 | 
			
		||||
@ -649,24 +649,24 @@ void vEventGroupDelete( EventGroupHandle_t xEventGroup )
 | 
			
		||||
    ( void ) xTaskResumeAll();
 | 
			
		||||
 | 
			
		||||
    #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )
 | 
			
		||||
    {
 | 
			
		||||
        /* The event group can only have been allocated dynamically - free
 | 
			
		||||
         * it again. */
 | 
			
		||||
        vPortFree( pxEventBits );
 | 
			
		||||
    }
 | 
			
		||||
    #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
 | 
			
		||||
    {
 | 
			
		||||
        /* The event group could have been allocated statically or
 | 
			
		||||
         * dynamically, so check before attempting to free the memory. */
 | 
			
		||||
        if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
 | 
			
		||||
        {
 | 
			
		||||
            /* The event group can only have been allocated dynamically - free
 | 
			
		||||
             * it again. */
 | 
			
		||||
            vPortFree( pxEventBits );
 | 
			
		||||
        }
 | 
			
		||||
    #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            /* The event group could have been allocated statically or
 | 
			
		||||
             * dynamically, so check before attempting to free the memory. */
 | 
			
		||||
            if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
 | 
			
		||||
            {
 | 
			
		||||
                vPortFree( pxEventBits );
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
            }
 | 
			
		||||
            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -334,6 +334,10 @@
 | 
			
		||||
    #define pcQueueGetName( xQueue )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef configUSE_MINI_LIST_ITEM
 | 
			
		||||
    #define configUSE_MINI_LIST_ITEM    1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef portPOINTER_SIZE_TYPE
 | 
			
		||||
    #define portPOINTER_SIZE_TYPE    uint32_t
 | 
			
		||||
#endif
 | 
			
		||||
@ -1134,16 +1138,20 @@ struct xSTATIC_LIST_ITEM
 | 
			
		||||
};
 | 
			
		||||
typedef struct xSTATIC_LIST_ITEM StaticListItem_t;
 | 
			
		||||
 | 
			
		||||
/* See the comments above the struct xSTATIC_LIST_ITEM definition. */
 | 
			
		||||
struct xSTATIC_MINI_LIST_ITEM
 | 
			
		||||
{
 | 
			
		||||
    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )
 | 
			
		||||
        TickType_t xDummy1;
 | 
			
		||||
    #endif
 | 
			
		||||
    TickType_t xDummy2;
 | 
			
		||||
    void * pvDummy3[ 2 ];
 | 
			
		||||
};
 | 
			
		||||
typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t;
 | 
			
		||||
#if ( configUSE_MINI_LIST_ITEM == 1 )
 | 
			
		||||
    /* See the comments above the struct xSTATIC_LIST_ITEM definition. */
 | 
			
		||||
    struct xSTATIC_MINI_LIST_ITEM
 | 
			
		||||
    {
 | 
			
		||||
        #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )
 | 
			
		||||
            TickType_t xDummy1;
 | 
			
		||||
        #endif
 | 
			
		||||
        TickType_t xDummy2;
 | 
			
		||||
        void * pvDummy3[ 2 ];
 | 
			
		||||
    };
 | 
			
		||||
    typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t;
 | 
			
		||||
#else /* if ( configUSE_MINI_LIST_ITEM == 1 ) */
 | 
			
		||||
    typedef struct xSTATIC_LIST_ITEM      StaticMiniListItem_t;
 | 
			
		||||
#endif /* if ( configUSE_MINI_LIST_ITEM == 1 ) */
 | 
			
		||||
 | 
			
		||||
/* See the comments above the struct xSTATIC_LIST_ITEM definition. */
 | 
			
		||||
typedef struct xSTATIC_LIST
 | 
			
		||||
 | 
			
		||||
@ -153,14 +153,18 @@ struct xLIST_ITEM
 | 
			
		||||
};
 | 
			
		||||
typedef struct xLIST_ITEM ListItem_t;                   /* For some reason lint wants this as two separate definitions. */
 | 
			
		||||
 | 
			
		||||
struct xMINI_LIST_ITEM
 | 
			
		||||
{
 | 
			
		||||
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    configLIST_VOLATILE TickType_t xItemValue;
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxNext;
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
 | 
			
		||||
};
 | 
			
		||||
typedef struct xMINI_LIST_ITEM MiniListItem_t;
 | 
			
		||||
#if ( configUSE_MINI_LIST_ITEM == 1 )
 | 
			
		||||
    struct xMINI_LIST_ITEM
 | 
			
		||||
    {
 | 
			
		||||
        listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
        configLIST_VOLATILE TickType_t xItemValue;
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxNext;
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
 | 
			
		||||
    };
 | 
			
		||||
    typedef struct xMINI_LIST_ITEM MiniListItem_t;
 | 
			
		||||
#else
 | 
			
		||||
    typedef struct xLIST_ITEM      MiniListItem_t;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Definition of the type of queue used by the scheduler.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								list.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								list.c
									
									
									
									
									
								
							@ -54,6 +54,8 @@ void vListInitialise( List_t * const pxList )
 | 
			
		||||
     * as the only list entry. */
 | 
			
		||||
    pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
 | 
			
		||||
 | 
			
		||||
    listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( &( pxList->xListEnd ) );
 | 
			
		||||
 | 
			
		||||
    /* The list end value is the highest possible value in the list to
 | 
			
		||||
     * ensure it remains at the end of the list. */
 | 
			
		||||
    pxList->xListEnd.xItemValue = portMAX_DELAY;
 | 
			
		||||
@ -63,6 +65,15 @@ void vListInitialise( List_t * const pxList )
 | 
			
		||||
    pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd );     /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
 | 
			
		||||
    pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
 | 
			
		||||
 | 
			
		||||
    /* Initialize the remaining fields of xListEnd when it is a proper ListItem_t */
 | 
			
		||||
    #if ( configUSE_MINI_LIST_ITEM == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        pxList->xListEnd.pvOwner = NULL;
 | 
			
		||||
        pxList->xListEnd.pxContainer = NULL;
 | 
			
		||||
        listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( &( pxList->xListEnd ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
 | 
			
		||||
 | 
			
		||||
    /* Write known values into the list if
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										592
									
								
								queue.c
									
									
									
									
									
								
							
							
						
						
									
										592
									
								
								queue.c
									
									
									
									
									
								
							@ -383,16 +383,16 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
 | 
			
		||||
            ( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) ) )
 | 
			
		||||
        {
 | 
			
		||||
            #if ( configASSERT_DEFINED == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                     * 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 );
 | 
			
		||||
            {
 | 
			
		||||
                /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                 * 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 );
 | 
			
		||||
 | 
			
		||||
                    /* 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. */
 | 
			
		||||
                }
 | 
			
		||||
                /* 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 */
 | 
			
		||||
 | 
			
		||||
            /* The address of a statically allocated queue was passed in, use it.
 | 
			
		||||
@ -401,12 +401,12 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
 | 
			
		||||
            pxNewQueue = ( Queue_t * ) pxStaticQueue; /*lint !e740 !e9087 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */
 | 
			
		||||
 | 
			
		||||
            #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Queues can be allocated wither statically or dynamically, so
 | 
			
		||||
                     * note this queue was allocated statically in case the queue is
 | 
			
		||||
                     * later deleted. */
 | 
			
		||||
                    pxNewQueue->ucStaticallyAllocated = pdTRUE;
 | 
			
		||||
                }
 | 
			
		||||
            {
 | 
			
		||||
                /* Queues can be allocated wither statically or dynamically, so
 | 
			
		||||
                 * note this queue was allocated statically in case the queue is
 | 
			
		||||
                 * later deleted. */
 | 
			
		||||
                pxNewQueue->ucStaticallyAllocated = pdTRUE;
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
 | 
			
		||||
 | 
			
		||||
            prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
 | 
			
		||||
@ -463,12 +463,12 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
 | 
			
		||||
                pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
 | 
			
		||||
 | 
			
		||||
                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
                    {
 | 
			
		||||
                        /* Queues can be created either statically or dynamically, so
 | 
			
		||||
                         * note this task was created dynamically in case it is later
 | 
			
		||||
                         * deleted. */
 | 
			
		||||
                        pxNewQueue->ucStaticallyAllocated = pdFALSE;
 | 
			
		||||
                    }
 | 
			
		||||
                {
 | 
			
		||||
                    /* Queues can be created either statically or dynamically, so
 | 
			
		||||
                     * note this task was created dynamically in case it is later
 | 
			
		||||
                     * deleted. */
 | 
			
		||||
                    pxNewQueue->ucStaticallyAllocated = pdFALSE;
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configSUPPORT_STATIC_ALLOCATION */
 | 
			
		||||
 | 
			
		||||
                prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
 | 
			
		||||
@ -522,15 +522,15 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,
 | 
			
		||||
    ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
 | 
			
		||||
 | 
			
		||||
    #if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
        {
 | 
			
		||||
            pxNewQueue->ucQueueType = ucQueueType;
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        pxNewQueue->ucQueueType = ucQueueType;
 | 
			
		||||
    }
 | 
			
		||||
    #endif /* configUSE_TRACE_FACILITY */
 | 
			
		||||
 | 
			
		||||
    #if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
        {
 | 
			
		||||
            pxNewQueue->pxQueueSetContainer = NULL;
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        pxNewQueue->pxQueueSetContainer = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    #endif /* configUSE_QUEUE_SETS */
 | 
			
		||||
 | 
			
		||||
    traceQUEUE_CREATE( pxNewQueue );
 | 
			
		||||
@ -845,9 +845,9 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
 | 
			
		||||
    configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
 | 
			
		||||
    configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /*lint -save -e904 This function relaxes the coding standard somewhat to
 | 
			
		||||
@ -866,69 +866,34 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
 | 
			
		||||
                traceQUEUE_SEND( pxQueue );
 | 
			
		||||
 | 
			
		||||
                #if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
 | 
			
		||||
 | 
			
		||||
                    xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
 | 
			
		||||
 | 
			
		||||
                    if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                    {
 | 
			
		||||
                        const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
 | 
			
		||||
 | 
			
		||||
                        xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
 | 
			
		||||
 | 
			
		||||
                        if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                        if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* Do not notify the queue set as an existing item
 | 
			
		||||
                                 * was overwritten in the queue so the number of items
 | 
			
		||||
                                 * in the queue has not changed. */
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The queue is a member of a queue set, and posting
 | 
			
		||||
                                 * to the queue set caused a higher priority task to
 | 
			
		||||
                                 * unblock. A context switch is required. */
 | 
			
		||||
                                queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            /* Do not notify the queue set as an existing item
 | 
			
		||||
                             * was overwritten in the queue so the number of items
 | 
			
		||||
                             * in the queue has not changed. */
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                        else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The queue is a member of a queue set, and posting
 | 
			
		||||
                             * to the queue set caused a higher priority task to
 | 
			
		||||
                             * unblock. A context switch is required. */
 | 
			
		||||
                            queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            /* If there was a task waiting for data to arrive on the
 | 
			
		||||
                             * queue then unblock it now. */
 | 
			
		||||
                            if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                                {
 | 
			
		||||
                                    /* The unblocked task has a priority higher than
 | 
			
		||||
                                     * our own so yield immediately.  Yes it is ok to
 | 
			
		||||
                                     * do this from within the critical section - the
 | 
			
		||||
                                     * kernel takes care of that. */
 | 
			
		||||
                                    queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if( xYieldRequired != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* This path is a special case that will only get
 | 
			
		||||
                                 * executed if the task was holding multiple mutexes
 | 
			
		||||
                                 * and the mutexes were given back in an order that is
 | 
			
		||||
                                 * different to that in which they were taken. */
 | 
			
		||||
                                queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
 | 
			
		||||
 | 
			
		||||
                        /* If there was a task waiting for data to arrive on the
 | 
			
		||||
                         * queue then unblock it now. */
 | 
			
		||||
                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
@ -936,9 +901,9 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The unblocked task has a priority higher than
 | 
			
		||||
                                 * our own so yield immediately.  Yes it is ok to do
 | 
			
		||||
                                 * this from within the critical section - the kernel
 | 
			
		||||
                                 * takes care of that. */
 | 
			
		||||
                                 * our own so yield immediately.  Yes it is ok to
 | 
			
		||||
                                 * do this from within the critical section - the
 | 
			
		||||
                                 * kernel takes care of that. */
 | 
			
		||||
                                queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
@ -949,8 +914,8 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
 | 
			
		||||
                        else if( xYieldRequired != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* This path is a special case that will only get
 | 
			
		||||
                             * executed if the task was holding multiple mutexes and
 | 
			
		||||
                             * the mutexes were given back in an order that is
 | 
			
		||||
                             * executed if the task was holding multiple mutexes
 | 
			
		||||
                             * and the mutexes were given back in an order that is
 | 
			
		||||
                             * different to that in which they were taken. */
 | 
			
		||||
                            queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                        }
 | 
			
		||||
@ -959,6 +924,41 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                {
 | 
			
		||||
                    xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
 | 
			
		||||
 | 
			
		||||
                    /* If there was a task waiting for data to arrive on the
 | 
			
		||||
                     * queue then unblock it now. */
 | 
			
		||||
                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The unblocked task has a priority higher than
 | 
			
		||||
                             * our own so yield immediately.  Yes it is ok to do
 | 
			
		||||
                             * this from within the critical section - the kernel
 | 
			
		||||
                             * takes care of that. */
 | 
			
		||||
                            queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else if( xYieldRequired != pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        /* This path is a special case that will only get
 | 
			
		||||
                         * executed if the task was holding multiple mutexes and
 | 
			
		||||
                         * the mutexes were given back in an order that is
 | 
			
		||||
                         * different to that in which they were taken. */
 | 
			
		||||
                        queueYIELD_IF_USING_PREEMPTION();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configUSE_QUEUE_SETS */
 | 
			
		||||
 | 
			
		||||
                taskEXIT_CRITICAL();
 | 
			
		||||
@ -1099,29 +1099,24 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
            if( cTxLock == queueUNLOCKED )
 | 
			
		||||
            {
 | 
			
		||||
                #if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                        if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )
 | 
			
		||||
                            /* Do not notify the queue set as an existing item
 | 
			
		||||
                             * was overwritten in the queue so the number of items
 | 
			
		||||
                             * in the queue has not changed. */
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                        else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The queue is a member of a queue set, and posting
 | 
			
		||||
                             * to the queue set caused a higher priority task to
 | 
			
		||||
                             * unblock.  A context switch is required. */
 | 
			
		||||
                            if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* Do not notify the queue set as an existing item
 | 
			
		||||
                                 * was overwritten in the queue so the number of items
 | 
			
		||||
                                 * in the queue has not changed. */
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The queue is a member of a queue set, and posting
 | 
			
		||||
                                 * to the queue set caused a higher priority task to
 | 
			
		||||
                                 * unblock.  A context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                }
 | 
			
		||||
                                *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
@ -1130,40 +1125,17 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                                {
 | 
			
		||||
                                    /* The task waiting has a higher priority so
 | 
			
		||||
                                     *  record that a context switch is required. */
 | 
			
		||||
                                    if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                    {
 | 
			
		||||
                                        *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                /* The task waiting has a higher priority so
 | 
			
		||||
                                 *  record that a context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
@ -1182,10 +1154,38 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        /* Not used in this path. */
 | 
			
		||||
                        ( void ) uxPreviousMessagesWaiting;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                {
 | 
			
		||||
                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The task waiting has a higher priority so record that a
 | 
			
		||||
                             * context switch is required. */
 | 
			
		||||
                            if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                            {
 | 
			
		||||
                                *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    /* Not used in this path. */
 | 
			
		||||
                    ( void ) uxPreviousMessagesWaiting;
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configUSE_QUEUE_SETS */
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
@ -1275,22 +1275,17 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
            if( cTxLock == queueUNLOCKED )
 | 
			
		||||
            {
 | 
			
		||||
                #if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                        if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                            /* The semaphore is a member of a queue set, and
 | 
			
		||||
                             * posting to the queue set caused a higher priority
 | 
			
		||||
                             * task to unblock.  A context switch is required. */
 | 
			
		||||
                            if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The semaphore is a member of a queue set, and
 | 
			
		||||
                                 * posting to the queue set caused a higher priority
 | 
			
		||||
                                 * task to unblock.  A context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                }
 | 
			
		||||
                                *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
@ -1299,40 +1294,17 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                                {
 | 
			
		||||
                                    /* The task waiting has a higher priority so
 | 
			
		||||
                                     *  record that a context switch is required. */
 | 
			
		||||
                                    if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                    {
 | 
			
		||||
                                        *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                /* The task waiting has a higher priority so
 | 
			
		||||
                                 *  record that a context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
@ -1352,6 +1324,34 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                {
 | 
			
		||||
                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The task waiting has a higher priority so record that a
 | 
			
		||||
                             * context switch is required. */
 | 
			
		||||
                            if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                            {
 | 
			
		||||
                                *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configUSE_QUEUE_SETS */
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
@ -1392,9 +1392,9 @@ BaseType_t xQueueReceive( QueueHandle_t xQueue,
 | 
			
		||||
 | 
			
		||||
    /* Cannot block if the scheduler is suspended. */
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /*lint -save -e904  This function relaxes the coding standard somewhat to
 | 
			
		||||
@ -1538,9 +1538,9 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
 | 
			
		||||
    /* Cannot block if the scheduler is suspended. */
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
 | 
			
		||||
@ -1565,18 +1565,18 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
                pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
 | 
			
		||||
 | 
			
		||||
                #if ( configUSE_MUTEXES == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* Record the information required to implement
 | 
			
		||||
                             * priority inheritance should it become necessary. */
 | 
			
		||||
                            pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                        /* Record the information required to implement
 | 
			
		||||
                         * priority inheritance should it become necessary. */
 | 
			
		||||
                        pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configUSE_MUTEXES */
 | 
			
		||||
 | 
			
		||||
                /* Check to see if other tasks are blocked waiting to give the
 | 
			
		||||
@ -1608,9 +1608,9 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
                     * initial timeout, and an adjusted timeout cannot become 0, as
 | 
			
		||||
                     * if it were 0 the function would have exited. */
 | 
			
		||||
                    #if ( configUSE_MUTEXES == 1 )
 | 
			
		||||
                        {
 | 
			
		||||
                            configASSERT( xInheritanceOccurred == pdFALSE );
 | 
			
		||||
                        }
 | 
			
		||||
                    {
 | 
			
		||||
                        configASSERT( xInheritanceOccurred == pdFALSE );
 | 
			
		||||
                    }
 | 
			
		||||
                    #endif /* configUSE_MUTEXES */
 | 
			
		||||
 | 
			
		||||
                    /* The semaphore count was 0 and no block time is specified
 | 
			
		||||
@ -1653,20 +1653,20 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
                traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
 | 
			
		||||
 | 
			
		||||
                #if ( configUSE_MUTEXES == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
                        taskENTER_CRITICAL();
 | 
			
		||||
                        {
 | 
			
		||||
                            taskENTER_CRITICAL();
 | 
			
		||||
                            {
 | 
			
		||||
                                xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
 | 
			
		||||
                            }
 | 
			
		||||
                            taskEXIT_CRITICAL();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
 | 
			
		||||
                        }
 | 
			
		||||
                        taskEXIT_CRITICAL();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* if ( configUSE_MUTEXES == 1 ) */
 | 
			
		||||
 | 
			
		||||
                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
 | 
			
		||||
@ -1702,27 +1702,27 @@ BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
 | 
			
		||||
            {
 | 
			
		||||
                #if ( configUSE_MUTEXES == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* xInheritanceOccurred could only have be set if
 | 
			
		||||
                     * pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
 | 
			
		||||
                     * test the mutex type again to check it is actually a mutex. */
 | 
			
		||||
                    if( xInheritanceOccurred != pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        /* xInheritanceOccurred could only have be set if
 | 
			
		||||
                         * pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
 | 
			
		||||
                         * test the mutex type again to check it is actually a mutex. */
 | 
			
		||||
                        if( xInheritanceOccurred != pdFALSE )
 | 
			
		||||
                        taskENTER_CRITICAL();
 | 
			
		||||
                        {
 | 
			
		||||
                            taskENTER_CRITICAL();
 | 
			
		||||
                            {
 | 
			
		||||
                                UBaseType_t uxHighestWaitingPriority;
 | 
			
		||||
                            UBaseType_t uxHighestWaitingPriority;
 | 
			
		||||
 | 
			
		||||
                                /* This task blocking on the mutex caused another
 | 
			
		||||
                                 * task to inherit this task's priority.  Now this task
 | 
			
		||||
                                 * has timed out the priority should be disinherited
 | 
			
		||||
                                 * again, but only as low as the next highest priority
 | 
			
		||||
                                 * task that is waiting for the same mutex. */
 | 
			
		||||
                                uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
 | 
			
		||||
                                vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
 | 
			
		||||
                            }
 | 
			
		||||
                            taskEXIT_CRITICAL();
 | 
			
		||||
                            /* This task blocking on the mutex caused another
 | 
			
		||||
                             * task to inherit this task's priority.  Now this task
 | 
			
		||||
                             * has timed out the priority should be disinherited
 | 
			
		||||
                             * again, but only as low as the next highest priority
 | 
			
		||||
                             * task that is waiting for the same mutex. */
 | 
			
		||||
                            uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
 | 
			
		||||
                            vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
 | 
			
		||||
                        }
 | 
			
		||||
                        taskEXIT_CRITICAL();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configUSE_MUTEXES */
 | 
			
		||||
 | 
			
		||||
                traceQUEUE_RECEIVE_FAILED( pxQueue );
 | 
			
		||||
@ -1755,9 +1755,9 @@ BaseType_t xQueuePeek( QueueHandle_t xQueue,
 | 
			
		||||
 | 
			
		||||
    /* Cannot block if the scheduler is suspended. */
 | 
			
		||||
    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
 | 
			
		||||
        {
 | 
			
		||||
            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /*lint -save -e904  This function relaxes the coding standard somewhat to
 | 
			
		||||
@ -2089,36 +2089,36 @@ void vQueueDelete( QueueHandle_t xQueue )
 | 
			
		||||
    traceQUEUE_DELETE( pxQueue );
 | 
			
		||||
 | 
			
		||||
    #if ( configQUEUE_REGISTRY_SIZE > 0 )
 | 
			
		||||
        {
 | 
			
		||||
            vQueueUnregisterQueue( pxQueue );
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        vQueueUnregisterQueue( pxQueue );
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )
 | 
			
		||||
    {
 | 
			
		||||
        /* The queue can only have been allocated dynamically - free it
 | 
			
		||||
         * again. */
 | 
			
		||||
        vPortFree( pxQueue );
 | 
			
		||||
    }
 | 
			
		||||
    #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
 | 
			
		||||
    {
 | 
			
		||||
        /* The queue could have been allocated statically or dynamically, so
 | 
			
		||||
         * check before attempting to free the memory. */
 | 
			
		||||
        if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
 | 
			
		||||
        {
 | 
			
		||||
            /* The queue can only have been allocated dynamically - free it
 | 
			
		||||
             * again. */
 | 
			
		||||
            vPortFree( pxQueue );
 | 
			
		||||
        }
 | 
			
		||||
    #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            /* The queue could have been allocated statically or dynamically, so
 | 
			
		||||
             * check before attempting to free the memory. */
 | 
			
		||||
            if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
 | 
			
		||||
            {
 | 
			
		||||
                vPortFree( pxQueue );
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
            }
 | 
			
		||||
            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #else /* if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) */
 | 
			
		||||
        {
 | 
			
		||||
            /* The queue must have been statically allocated, so is not going to be
 | 
			
		||||
             * deleted.  Avoid compiler warnings about the unused parameter. */
 | 
			
		||||
            ( void ) pxQueue;
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        /* The queue must have been statically allocated, so is not going to be
 | 
			
		||||
         * deleted.  Avoid compiler warnings about the unused parameter. */
 | 
			
		||||
        ( void ) pxQueue;
 | 
			
		||||
    }
 | 
			
		||||
    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
@ -2195,18 +2195,18 @@ static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue,
 | 
			
		||||
    if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
 | 
			
		||||
    {
 | 
			
		||||
        #if ( configUSE_MUTEXES == 1 )
 | 
			
		||||
        {
 | 
			
		||||
            if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
            {
 | 
			
		||||
                if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
 | 
			
		||||
                {
 | 
			
		||||
                    /* The mutex is no longer being held. */
 | 
			
		||||
                    xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
 | 
			
		||||
                    pxQueue->u.xSemaphore.xMutexHolder = NULL;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                }
 | 
			
		||||
                /* The mutex is no longer being held. */
 | 
			
		||||
                xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
 | 
			
		||||
                pxQueue->u.xSemaphore.xMutexHolder = NULL;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        #endif /* configUSE_MUTEXES */
 | 
			
		||||
    }
 | 
			
		||||
    else if( xPosition == queueSEND_TO_BACK )
 | 
			
		||||
@ -2303,55 +2303,32 @@ static void prvUnlockQueue( Queue_t * const pxQueue )
 | 
			
		||||
            /* Data was posted while the queue was locked.  Are any tasks
 | 
			
		||||
             * blocked waiting for data to become available? */
 | 
			
		||||
            #if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                {
 | 
			
		||||
                    if( pxQueue->pxQueueSetContainer != NULL )
 | 
			
		||||
                    if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The queue is a member of a queue set, and posting to
 | 
			
		||||
                             * the queue set caused a higher priority task to unblock.
 | 
			
		||||
                             * A context switch is required. */
 | 
			
		||||
                            vTaskMissedYield();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                        /* The queue is a member of a queue set, and posting to
 | 
			
		||||
                         * the queue set caused a higher priority task to unblock.
 | 
			
		||||
                         * A context switch is required. */
 | 
			
		||||
                        vTaskMissedYield();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        /* Tasks that are removed from the event list will get
 | 
			
		||||
                         * added to the pending ready list as the scheduler is still
 | 
			
		||||
                         * suspended. */
 | 
			
		||||
                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                vTaskMissedYield();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    /* Tasks that are removed from the event list will get added to
 | 
			
		||||
                     * the pending ready list as the scheduler is still suspended. */
 | 
			
		||||
                    /* Tasks that are removed from the event list will get
 | 
			
		||||
                     * added to the pending ready list as the scheduler is still
 | 
			
		||||
                     * suspended. */
 | 
			
		||||
                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The task waiting has a higher priority so record that
 | 
			
		||||
                             * a context switch is required. */
 | 
			
		||||
                            /* The task waiting has a higher priority so record that a
 | 
			
		||||
                             * context switch is required. */
 | 
			
		||||
                            vTaskMissedYield();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
@ -2364,6 +2341,29 @@ static void prvUnlockQueue( Queue_t * const pxQueue )
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #else /* configUSE_QUEUE_SETS */
 | 
			
		||||
            {
 | 
			
		||||
                /* Tasks that are removed from the event list will get added to
 | 
			
		||||
                 * the pending ready list as the scheduler is still suspended. */
 | 
			
		||||
                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
 | 
			
		||||
                {
 | 
			
		||||
                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                    {
 | 
			
		||||
                        /* The task waiting has a higher priority so record that
 | 
			
		||||
                         * a context switch is required. */
 | 
			
		||||
                        vTaskMissedYield();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configUSE_QUEUE_SETS */
 | 
			
		||||
 | 
			
		||||
            --cTxLock;
 | 
			
		||||
 | 
			
		||||
@ -345,13 +345,13 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
 | 
			
		||||
        configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );
 | 
			
		||||
 | 
			
		||||
        #if ( configASSERT_DEFINED == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                 * variable of type StaticStreamBuffer_t equals the size of the real
 | 
			
		||||
                 * message buffer structure. */
 | 
			
		||||
                volatile size_t xSize = sizeof( StaticStreamBuffer_t );
 | 
			
		||||
                configASSERT( xSize == sizeof( StreamBuffer_t ) );
 | 
			
		||||
            } /*lint !e529 xSize is referenced is configASSERT() is defined. */
 | 
			
		||||
        {
 | 
			
		||||
            /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
             * variable of type StaticStreamBuffer_t equals the size of the real
 | 
			
		||||
             * message buffer structure. */
 | 
			
		||||
            volatile size_t xSize = sizeof( StaticStreamBuffer_t );
 | 
			
		||||
            configASSERT( xSize == sizeof( StreamBuffer_t ) );
 | 
			
		||||
        } /*lint !e529 xSize is referenced is configASSERT() is defined. */
 | 
			
		||||
        #endif /* configASSERT_DEFINED */
 | 
			
		||||
 | 
			
		||||
        if( ( pucStreamBufferStorageArea != NULL ) && ( pxStaticStreamBuffer != NULL ) )
 | 
			
		||||
@ -393,17 +393,17 @@ void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer )
 | 
			
		||||
    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) pdFALSE )
 | 
			
		||||
    {
 | 
			
		||||
        #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                /* Both the structure and the buffer were allocated using a single call
 | 
			
		||||
                * to pvPortMalloc(), hence only one call to vPortFree() is required. */
 | 
			
		||||
                vPortFree( ( void * ) pxStreamBuffer ); /*lint !e9087 Standard free() semantics require void *, plus pxStreamBuffer was allocated by pvPortMalloc(). */
 | 
			
		||||
            }
 | 
			
		||||
        {
 | 
			
		||||
            /* Both the structure and the buffer were allocated using a single call
 | 
			
		||||
            * to pvPortMalloc(), hence only one call to vPortFree() is required. */
 | 
			
		||||
            vPortFree( ( void * ) pxStreamBuffer ); /*lint !e9087 Standard free() semantics require void *, plus pxStreamBuffer was allocated by pvPortMalloc(). */
 | 
			
		||||
        }
 | 
			
		||||
        #else
 | 
			
		||||
            {
 | 
			
		||||
                /* Should not be possible to get here, ucFlags must be corrupt.
 | 
			
		||||
                 * Force an assert. */
 | 
			
		||||
                configASSERT( xStreamBuffer == ( StreamBufferHandle_t ) ~0 );
 | 
			
		||||
            }
 | 
			
		||||
        {
 | 
			
		||||
            /* Should not be possible to get here, ucFlags must be corrupt.
 | 
			
		||||
             * Force an assert. */
 | 
			
		||||
            configASSERT( xStreamBuffer == ( StreamBufferHandle_t ) ~0 );
 | 
			
		||||
        }
 | 
			
		||||
        #endif
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
@ -427,11 +427,11 @@ BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer )
 | 
			
		||||
    configASSERT( pxStreamBuffer );
 | 
			
		||||
 | 
			
		||||
    #if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
        {
 | 
			
		||||
            /* Store the stream buffer number so it can be restored after the
 | 
			
		||||
             * reset. */
 | 
			
		||||
            uxStreamBufferNumber = pxStreamBuffer->uxStreamBufferNumber;
 | 
			
		||||
        }
 | 
			
		||||
    {
 | 
			
		||||
        /* Store the stream buffer number so it can be restored after the
 | 
			
		||||
         * reset. */
 | 
			
		||||
        uxStreamBufferNumber = pxStreamBuffer->uxStreamBufferNumber;
 | 
			
		||||
    }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    /* Can only reset a message buffer if there are no tasks blocked on it. */
 | 
			
		||||
@ -449,9 +449,9 @@ BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer )
 | 
			
		||||
                xReturn = pdPASS;
 | 
			
		||||
 | 
			
		||||
                #if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
                    {
 | 
			
		||||
                        pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;
 | 
			
		||||
                    }
 | 
			
		||||
                {
 | 
			
		||||
                    pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;
 | 
			
		||||
                }
 | 
			
		||||
                #endif
 | 
			
		||||
 | 
			
		||||
                traceSTREAM_BUFFER_RESET( xStreamBuffer );
 | 
			
		||||
@ -1266,13 +1266,13 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
 | 
			
		||||
     * be written to without generating exceptions, and is setting the buffer to a
 | 
			
		||||
     * known value to assist in development/debugging. */
 | 
			
		||||
    #if ( configASSERT_DEFINED == 1 )
 | 
			
		||||
        {
 | 
			
		||||
            /* The value written just has to be identifiable when looking at the
 | 
			
		||||
             * memory.  Don't use 0xA5 as that is the stack fill value and could
 | 
			
		||||
             * result in confusion as to what is actually being observed. */
 | 
			
		||||
            const BaseType_t xWriteValue = 0x55;
 | 
			
		||||
            configASSERT( memset( pucBuffer, ( int ) xWriteValue, xBufferSizeBytes ) == pucBuffer );
 | 
			
		||||
        } /*lint !e529 !e438 xWriteValue is only used if configASSERT() is defined. */
 | 
			
		||||
    {
 | 
			
		||||
        /* The value written just has to be identifiable when looking at the
 | 
			
		||||
         * memory.  Don't use 0xA5 as that is the stack fill value and could
 | 
			
		||||
         * result in confusion as to what is actually being observed. */
 | 
			
		||||
        const BaseType_t xWriteValue = 0x55;
 | 
			
		||||
        configASSERT( memset( pucBuffer, ( int ) xWriteValue, xBufferSizeBytes ) == pucBuffer );
 | 
			
		||||
    } /*lint !e529 !e438 xWriteValue is only used if configASSERT() is defined. */
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    ( void ) memset( ( void * ) pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) ); /*lint !e9087 memset() requires void *. */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										180
									
								
								timers.c
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								timers.c
									
									
									
									
									
								
							@ -243,34 +243,34 @@
 | 
			
		||||
        if( xTimerQueue != NULL )
 | 
			
		||||
        {
 | 
			
		||||
            #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                StaticTask_t * pxTimerTaskTCBBuffer = NULL;
 | 
			
		||||
                StackType_t * pxTimerTaskStackBuffer = NULL;
 | 
			
		||||
                uint32_t ulTimerTaskStackSize;
 | 
			
		||||
 | 
			
		||||
                vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
 | 
			
		||||
                xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
 | 
			
		||||
                                                      configTIMER_SERVICE_TASK_NAME,
 | 
			
		||||
                                                      ulTimerTaskStackSize,
 | 
			
		||||
                                                      NULL,
 | 
			
		||||
                                                      ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
 | 
			
		||||
                                                      pxTimerTaskStackBuffer,
 | 
			
		||||
                                                      pxTimerTaskTCBBuffer );
 | 
			
		||||
 | 
			
		||||
                if( xTimerTaskHandle != NULL )
 | 
			
		||||
                {
 | 
			
		||||
                    StaticTask_t * pxTimerTaskTCBBuffer = NULL;
 | 
			
		||||
                    StackType_t * pxTimerTaskStackBuffer = NULL;
 | 
			
		||||
                    uint32_t ulTimerTaskStackSize;
 | 
			
		||||
 | 
			
		||||
                    vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
 | 
			
		||||
                    xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
 | 
			
		||||
                                                          configTIMER_SERVICE_TASK_NAME,
 | 
			
		||||
                                                          ulTimerTaskStackSize,
 | 
			
		||||
                                                          NULL,
 | 
			
		||||
                                                          ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
 | 
			
		||||
                                                          pxTimerTaskStackBuffer,
 | 
			
		||||
                                                          pxTimerTaskTCBBuffer );
 | 
			
		||||
 | 
			
		||||
                    if( xTimerTaskHandle != NULL )
 | 
			
		||||
                    {
 | 
			
		||||
                        xReturn = pdPASS;
 | 
			
		||||
                    }
 | 
			
		||||
                    xReturn = pdPASS;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
 | 
			
		||||
                {
 | 
			
		||||
                    xReturn = xTaskCreate( prvTimerTask,
 | 
			
		||||
                                           configTIMER_SERVICE_TASK_NAME,
 | 
			
		||||
                                           configTIMER_TASK_STACK_DEPTH,
 | 
			
		||||
                                           NULL,
 | 
			
		||||
                                           ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
 | 
			
		||||
                                           &xTimerTaskHandle );
 | 
			
		||||
                }
 | 
			
		||||
            {
 | 
			
		||||
                xReturn = xTaskCreate( prvTimerTask,
 | 
			
		||||
                                       configTIMER_SERVICE_TASK_NAME,
 | 
			
		||||
                                       configTIMER_TASK_STACK_DEPTH,
 | 
			
		||||
                                       NULL,
 | 
			
		||||
                                       ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
 | 
			
		||||
                                       &xTimerTaskHandle );
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configSUPPORT_STATIC_ALLOCATION */
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
@ -322,14 +322,14 @@
 | 
			
		||||
            Timer_t * pxNewTimer;
 | 
			
		||||
 | 
			
		||||
            #if ( configASSERT_DEFINED == 1 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                     * variable of type StaticTimer_t equals the size of the real timer
 | 
			
		||||
                     * structure. */
 | 
			
		||||
                    volatile size_t xSize = sizeof( StaticTimer_t );
 | 
			
		||||
                    configASSERT( xSize == sizeof( Timer_t ) );
 | 
			
		||||
                    ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
 | 
			
		||||
                }
 | 
			
		||||
            {
 | 
			
		||||
                /* Sanity check that the size of the structure used to declare a
 | 
			
		||||
                 * variable of type StaticTimer_t equals the size of the real timer
 | 
			
		||||
                 * structure. */
 | 
			
		||||
                volatile size_t xSize = sizeof( StaticTimer_t );
 | 
			
		||||
                configASSERT( xSize == sizeof( Timer_t ) );
 | 
			
		||||
                ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* configASSERT_DEFINED */
 | 
			
		||||
 | 
			
		||||
            /* A pointer to a StaticTimer_t structure MUST be provided, use it. */
 | 
			
		||||
@ -574,15 +574,15 @@
 | 
			
		||||
        ( void ) pvParameters;
 | 
			
		||||
 | 
			
		||||
        #if ( configUSE_DAEMON_TASK_STARTUP_HOOK == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                extern void vApplicationDaemonTaskStartupHook( void );
 | 
			
		||||
        {
 | 
			
		||||
            extern void vApplicationDaemonTaskStartupHook( void );
 | 
			
		||||
 | 
			
		||||
                /* Allow the application writer to execute some code in the context of
 | 
			
		||||
                 * this task at the point the task starts executing.  This is useful if the
 | 
			
		||||
                 * application includes initialisation code that would benefit from
 | 
			
		||||
                 * executing after the scheduler has been started. */
 | 
			
		||||
                vApplicationDaemonTaskStartupHook();
 | 
			
		||||
            }
 | 
			
		||||
            /* Allow the application writer to execute some code in the context of
 | 
			
		||||
             * this task at the point the task starts executing.  This is useful if the
 | 
			
		||||
             * application includes initialisation code that would benefit from
 | 
			
		||||
             * executing after the scheduler has been started. */
 | 
			
		||||
            vApplicationDaemonTaskStartupHook();
 | 
			
		||||
        }
 | 
			
		||||
        #endif /* configUSE_DAEMON_TASK_STARTUP_HOOK */
 | 
			
		||||
 | 
			
		||||
        for( ; ; )
 | 
			
		||||
@ -767,25 +767,25 @@
 | 
			
		||||
        while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */
 | 
			
		||||
        {
 | 
			
		||||
            #if ( INCLUDE_xTimerPendFunctionCall == 1 )
 | 
			
		||||
            {
 | 
			
		||||
                /* Negative commands are pended function calls rather than timer
 | 
			
		||||
                 * commands. */
 | 
			
		||||
                if( xMessage.xMessageID < ( BaseType_t ) 0 )
 | 
			
		||||
                {
 | 
			
		||||
                    /* Negative commands are pended function calls rather than timer
 | 
			
		||||
                     * commands. */
 | 
			
		||||
                    if( xMessage.xMessageID < ( BaseType_t ) 0 )
 | 
			
		||||
                    {
 | 
			
		||||
                        const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
 | 
			
		||||
                    const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
 | 
			
		||||
 | 
			
		||||
                        /* The timer uses the xCallbackParameters member to request a
 | 
			
		||||
                         * callback be executed.  Check the callback is not NULL. */
 | 
			
		||||
                        configASSERT( pxCallback );
 | 
			
		||||
                    /* The timer uses the xCallbackParameters member to request a
 | 
			
		||||
                     * callback be executed.  Check the callback is not NULL. */
 | 
			
		||||
                    configASSERT( pxCallback );
 | 
			
		||||
 | 
			
		||||
                        /* Call the function. */
 | 
			
		||||
                        pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                    /* Call the function. */
 | 
			
		||||
                    pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #endif /* INCLUDE_xTimerPendFunctionCall */
 | 
			
		||||
 | 
			
		||||
            /* Commands that are positive are timer commands rather than pended
 | 
			
		||||
@ -872,27 +872,27 @@
 | 
			
		||||
 | 
			
		||||
                    case tmrCOMMAND_DELETE:
 | 
			
		||||
                        #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
 | 
			
		||||
                        {
 | 
			
		||||
                            /* The timer has already been removed from the active list,
 | 
			
		||||
                             * just free up the memory if the memory was dynamically
 | 
			
		||||
                             * allocated. */
 | 
			
		||||
                            if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The timer has already been removed from the active list,
 | 
			
		||||
                                 * just free up the memory if the memory was dynamically
 | 
			
		||||
                                 * allocated. */
 | 
			
		||||
                                if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
 | 
			
		||||
                                {
 | 
			
		||||
                                    vPortFree( pxTimer );
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );
 | 
			
		||||
                                }
 | 
			
		||||
                                vPortFree( pxTimer );
 | 
			
		||||
                            }
 | 
			
		||||
                        #else /* if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                /* If dynamic allocation is not enabled, the memory
 | 
			
		||||
                                 * could not have been dynamically allocated. So there is
 | 
			
		||||
                                 * no need to free the memory - just mark the timer as
 | 
			
		||||
                                 * "not active". */
 | 
			
		||||
                                pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        #else /* if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */
 | 
			
		||||
                        {
 | 
			
		||||
                            /* If dynamic allocation is not enabled, the memory
 | 
			
		||||
                             * could not have been dynamically allocated. So there is
 | 
			
		||||
                             * no need to free the memory - just mark the timer as
 | 
			
		||||
                             * "not active". */
 | 
			
		||||
                            pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );
 | 
			
		||||
                        }
 | 
			
		||||
                        #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
@ -945,31 +945,31 @@
 | 
			
		||||
                pxOverflowTimerList = &xActiveTimerList2;
 | 
			
		||||
 | 
			
		||||
                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
                    {
 | 
			
		||||
                        /* The timer queue is allocated statically in case
 | 
			
		||||
                         * configSUPPORT_DYNAMIC_ALLOCATION is 0. */
 | 
			
		||||
                        PRIVILEGED_DATA static StaticQueue_t xStaticTimerQueue;                                                                          /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
 | 
			
		||||
                        PRIVILEGED_DATA static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
 | 
			
		||||
                {
 | 
			
		||||
                    /* The timer queue is allocated statically in case
 | 
			
		||||
                     * configSUPPORT_DYNAMIC_ALLOCATION is 0. */
 | 
			
		||||
                    PRIVILEGED_DATA static StaticQueue_t xStaticTimerQueue;                                                                          /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
 | 
			
		||||
                    PRIVILEGED_DATA static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
 | 
			
		||||
 | 
			
		||||
                        xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
 | 
			
		||||
                    }
 | 
			
		||||
                    xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
 | 
			
		||||
                }
 | 
			
		||||
                #else
 | 
			
		||||
                    {
 | 
			
		||||
                        xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) );
 | 
			
		||||
                    }
 | 
			
		||||
                {
 | 
			
		||||
                    xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) );
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
 | 
			
		||||
 | 
			
		||||
                #if ( configQUEUE_REGISTRY_SIZE > 0 )
 | 
			
		||||
                {
 | 
			
		||||
                    if( xTimerQueue != NULL )
 | 
			
		||||
                    {
 | 
			
		||||
                        if( xTimerQueue != NULL )
 | 
			
		||||
                        {
 | 
			
		||||
                            vQueueAddToRegistry( xTimerQueue, "TmrQ" );
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                        }
 | 
			
		||||
                        vQueueAddToRegistry( xTimerQueue, "TmrQ" );
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        mtCOVERAGE_TEST_MARKER();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                #endif /* configQUEUE_REGISTRY_SIZE */
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user