FreeRTOS的列表

FreeRTOS的列表

typedef struct xLIST  
{  
     listFIRST_LIST_INTEGRITY_CHECK_VALUE                        /*用于检测列表项数据是否完整*/  
     configLIST_VOLATILE UBaseType_t uxNumberOfItems;  
     ListItem_t * configLIST_VOLATILE pxIndex;                   /*用于遍历列表*/  
     MiniListItem_t xListEnd;                                    /*列表项*/  
     listSECOND_LIST_INTEGRITY_CHECK_VALUE                       /*用于检测列表项数据是否完整*/  
}List_t;  
struct xLIST_ITEM  
{  
     listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE           /*用于检测列表项数据是否完整*/  
     configLIST_VOLATILETickType_t xItemValue;           /*列表项值*/  
     struct xLIST_ITEM * configLIST_VOLATILE pxNext;      /*指向列表中下一个列表项*/  
     struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;  /*指向列表中上一个列表项*/  
     void * pvOwner;                                     /*指向一个任务TCB*/  
     void * configLIST_VOLATILE pvContainer;             /*指向包含该列表项的列表 */  
     listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE          /*用于检测列表项数据是否完整*/  
};  
typedef struct xLIST_ITEM ListItem_t;  
struct xMINI_LIST_ITEM  
{  
     listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE           /*用于检测列表项数据是否完整*/  
     configLIST_VOLATILE TickType_t xItemValue;  
     struct xLIST_ITEM * configLIST_VOLATILE pxNext;  
     struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;  
};  
typedef struct xMINI_LIST_ITEM MiniListItem_t;  
pxReturn = ( xExecutingBufferDescriptor_t * ) listGET_OWNER_OF_HEAD_ENTRY( &xExecuting_FreeBuffersList );
#define listGET_OWNER_OF_HEAD_ENTRY( pxList )  ( (&( ( pxList )->xListEnd ))->pxNext->pvOwner )

( pxList )->xListEnd ):列表的xListEnd,列表中的最后一个列表项,类型是MiniListItem_t
(&( ( pxList )->xListEnd ))->pxNext:指向下一个列表项
由于列表中的列表项是一个循环项,所以最后一个列表项的下一个列表就是列表的第一个列表项
( (&( ( pxList )->xListEnd ))->pxNext->pvOwner ):列表项的pvOwner,记录列表归谁拥有,通常是任务控制块

#

void * pvOwner; 表示定义一个pvOwner指针,指向目标的类型是void
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; 表示定义一个pxPrevious的指针,指向的目标是xLIST_ITEM 结构体

猜你喜欢

转载自blog.csdn.net/ngany/article/details/77184923
今日推荐