13.1.3 列表和列表项初始化函数

更新于 2026年10月10日 版权声明
13.1.3 列表和列表项初始化函数

图示

图13.3 迷你列表项的结构示意图

1.列表初始化函数vListInitialise()

在创建任务时,需要对该任务所在的列表进行初始化,实际上就是对列表结构体中的成员进行初始化。列表初始化函数vListInitialise()位于“list.c”文件中,程序如下。

图示

各语句功能如下。

①将尾列表项作为列表的当前列表项。xListEnd用来表示列表的末尾,而pxIndex表示列表项的索引号,此时列表只有一个列表项,那就是xListEnd,所以pxIndex指向xListEnd。

②给列表的尾列表项的xItemValue赋值portMAX_DELAY,在文件“portmacro.h”中被定义为0xffffffffUL。

③初始化列表项xListEnd的pxNext变量,因为此时列表只有一个列表项xListEnd,所以pxNext只能指向自身。

④让尾列表项指向的前一个列表项和后一个列表项均为尾列表项自身。(https://www.daowen.com)

⑤标记此时列表项个数为0,说明尾列表项不计入列表项总数。

⑥和⑦用来写入校验数。

任务的列表初始化完成以后,结构如图13.4所示。

图示

图13.4 列表初始化结构图

列表初始化函数将基于优先级任务的列表索引号pxIndex指向其列表项的xListEnd。列表结束xListEnd的xItemValue设置为portMAX_DELAY,因为列表中的列表项都是按照大小进行排序的,这样可以保证xListEnd在最后,xListEnd的pxNext和pxPrevious都指向自身。列表项uxNumberOfItems置0。

2.列表项初始化函数vListInitialiseItem()

列表项初始化函数vListInitialiseItem()在“list.c”文件中,程序如下。

图示

列表项的初始化主要是将其pvContainer指针置NULL,表示不在任何一个列表中。列表项的所有成员是在任务运行过程中进行赋值的,如任务创建函数xTaskCreate()会对任务堆栈中的xStateListItem和xEventListItem这两个列表项中的其他成员变量进行初始化。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)