62 #error "FreeRTOS.h must be included before list.h"
93#ifndef configLIST_VOLATILE
94 #define configLIST_VOLATILE
108#if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )
110 #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
111 #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
112 #define listFIRST_LIST_INTEGRITY_CHECK_VALUE
113 #define listSECOND_LIST_INTEGRITY_CHECK_VALUE
114 #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
115 #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
116 #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )
117 #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )
118 #define listTEST_LIST_ITEM_INTEGRITY( pxItem )
119 #define listTEST_LIST_INTEGRITY( pxList )
122 #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1;
123 #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2;
124 #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1;
125 #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2;
128 #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
129 #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
130 #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
131 #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
135 #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
136 #define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
156#if ( configUSE_MINI_LIST_ITEM == 1 )
157 struct xMINI_LIST_ITEM
188#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner ) ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) )
197#define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner )
206#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) )
216#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue )
225#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext->xItemValue )
233#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext )
241#define listGET_NEXT( pxListItem ) ( ( pxListItem )->pxNext )
249#define listGET_END_MARKER( pxList ) ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) )
258#define listLIST_IS_EMPTY( pxList ) ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE )
263#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems )
285#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \
287 List_t * const pxConstList = ( pxList ); \
290 ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \
291 if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \
293 ( pxConstList )->pxIndex = ( pxConstList )->xListEnd.pxNext; \
295 ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner; \
314#define listREMOVE_ITEM( pxItemToRemove ) \
318 List_t * const pxList = ( pxItemToRemove )->pxContainer; \
320 ( pxItemToRemove )->pxNext->pxPrevious = ( pxItemToRemove )->pxPrevious; \
321 ( pxItemToRemove )->pxPrevious->pxNext = ( pxItemToRemove )->pxNext; \
323 if( pxList->pxIndex == ( pxItemToRemove ) ) \
325 pxList->pxIndex = ( pxItemToRemove )->pxPrevious; \
328 ( pxItemToRemove )->pxContainer = NULL; \
329 ( pxList->uxNumberOfItems )--; \
354#define listINSERT_END( pxList, pxNewListItem ) \
356 ListItem_t * const pxIndex = ( pxList )->pxIndex; \
361 listTEST_LIST_INTEGRITY( ( pxList ) ); \
362 listTEST_LIST_ITEM_INTEGRITY( ( pxNewListItem ) ); \
367 ( pxNewListItem )->pxNext = pxIndex; \
368 ( pxNewListItem )->pxPrevious = pxIndex->pxPrevious; \
370 pxIndex->pxPrevious->pxNext = ( pxNewListItem ); \
371 pxIndex->pxPrevious = ( pxNewListItem ); \
374 ( pxNewListItem )->pxContainer = ( pxList ); \
376 ( ( pxList )->uxNumberOfItems )++; \
395#define listGET_OWNER_OF_HEAD_ENTRY( pxList ) ( ( &( ( pxList )->xListEnd ) )->pxNext->pvOwner )
406#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) )
414#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pxContainer )
421#define listLIST_IS_INITIALISED( pxList ) ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY )
struct xLIST_ITEM ListItem_t
#define configLIST_VOLATILE
UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove) PRIVILEGED_FUNCTION
#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
#define listFIRST_LIST_INTEGRITY_CHECK_VALUE
void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem) PRIVILEGED_FUNCTION
struct xLIST_ITEM MiniListItem_t
#define listSECOND_LIST_INTEGRITY_CHECK_VALUE
void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) PRIVILEGED_FUNCTION
void vListInitialiseItem(ListItem_t *const pxItem) PRIVILEGED_FUNCTION
#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
void vListInitialise(List_t *const pxList) PRIVILEGED_FUNCTION
#define PRIVILEGED_FUNCTION
unsigned long UBaseType_t
struct xLIST_ITEM *configLIST_VOLATILE pxNext
Pointer to the next ListItem_t in the list.
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE configLIST_VOLATILE TickType_t xItemValue
< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1.
struct xLIST_ITEM *configLIST_VOLATILE pxPrevious
Pointer to the previous ListItem_t in the list.
void * pvOwner
Pointer to the object (normally a TCB) that contains the list item.
struct xLIST *configLIST_VOLATILE pxContainer
Pointer to the list in which this list item is placed (if any).
MiniListItem_t xListEnd
List item that contains the maximum possible item value meaning it is always at the end of the list a...
ListItem_t *configLIST_VOLATILE pxIndex
Used to walk through the list.
listFIRST_LIST_INTEGRITY_CHECK_VALUE volatile UBaseType_t uxNumberOfItems
< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1.