概述
1.列表结构体:
typedef struct xLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE //用来检查数据的完整性
configLIST_VOLATILE UBaseType_t uxNumberOfItems;//记录列表中列表项的数目
ListItem_t * configLIST_VOLATILE pxIndex; //当前列表的索引号,用于遍历列表
MiniListItem_t xListEnd; //列表中最后一个列表项,表示列表的结束,其类型为MiniListItem_t
listSECOND_LIST_INTEGRITY_CHECK_VALUE //用来检查数据的完整性
}List_t;
2.MiniListItem_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;
3.列表项
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; /* For some reason lint wants this as two separate definitions. */
4.列表初始化
1.列表初始化时,列表是空的,因此列表的pxindex是指向列表的尾的
2、3、4:初始化列表的xListEnd
5:列表的列表项的数目为0
初始化完成功能以后,列表如下所示:
5.初始化列表项
1.此列表项暂时不属于任何列表
6.列表项的插入
1.插入列表项的值,根据这个值才能确定要插入列表的位置
2.如果列表项的值是最大值,就把此列表项插到对尾
3.遍历列表,找到列表项插入的位置
4.把列表项插入列表
5.设置列表项归此列表
6.列表的列表项的数目加1
7.列表项的删除
1.确定要删除列表项的归属列表
2.通过操作链表指向删除列表项
3.如果列表的指向为要删除的列表项,则列表指向要删除列表项的前一项
4.要删除的列表项的Container指向空
5.列表的列表项数目减1
6.返回列表的列表项数目
7.列表的遍历
1.列表指向的列表项的pvowner记录为pxTCB;pxList是遍历的列表
2.列表的index指向下一个列表项
3.如果列表的inxdex指向了xListend,
4.列表的index指向下一个列表项->列表头的列表项
5.确认任务控制块
最后
以上就是靓丽小兔子为你收集整理的FreeRTOS笔记---列表和列表项的全部内容,希望文章能够帮你解决FreeRTOS笔记---列表和列表项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复