一、列表与列表项简介
列表是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;
①、首尾两个校验值是通过宏定义的已知常量,通过检测这两个值来判断列表的数据在运行过程中是否正确。该功能一般用于调试,默认关闭;
②、uxNumberOfItems 用于记录列表中列表项的个数;
③、pxIndex 用来指向列表中的某个列表项,一般用来遍历列表;
④、xListEnd 是末尾列表项
⑤、列表示意图:
三、列表项
struct xLIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE //校验项
configLIST_VOLATILE TickType_t xItemValue; //列表项的值
struct xLIST_ITEM * configLIST_VOLATILE pxNext; //下一个列表项
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; //上一个列表项
void * pvOwner; //列表项的拥有者
void * configLIST_VOLATILE pvContainer; //列表项所在的列表
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE //校验项
typedef struct xLIST_ITEM ListItem_t;
①、首尾校验项默认关闭;
②、xItemValue 为列表项的一个值,用来对列表项进行排序;
③、pxNext、pxPrevious 前后指针;
④、pvOwner 用来指向任务控制块;
⑤、pvContainer 用来指向列表,例如就绪列表、阻塞列表、挂起列表;
⑥、列表项示意图:
四、mini列表项
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;
与列表项类似,固定在列表项的结尾。
mini列表项示意图:
五、列表与列表项相关API函数
1、列表初始化
void vListInitialise( List_t * const pxList )
{
//列表中只有 x