前文已经详细介绍了, 列表就是FreeRTOS的一种数据结构, 用于挂载各种不同状态的任务, 其实就是双向带头循环链表, 头结点就是列表结构体, 结点就是列表项结构体.
接下来回顾一下列表和列表项的结构.
如下所示, 表示了列表中此时没有一个列表项.
?
这里数值不对, uxNumberOfItems = 1.??
?
?
列表的API函数就是这些基本的, 初始化, 插入, 删除.?
列表项的数值, 因为作为结尾所以是最大值, portMAX_DELAY就是0xffffffff.??
?非常简单, 把Container置0, 也就是此时不属于任何列表的列表项.
还记得列表项中有一个分配的数值, xItemValue, 就是根据这个来进行升序插入. 此时的列表项里面已经有内容了, 比如阻塞态的列表项, 它的xItemValue就和任务延时的时间有关.
?
?
?尾插是一种无序的插法, 此时两种情况的插法, 都和pxIndex有关, 插入到pxIndex的前面, 并不一定是列表的最后.
?
?不管是插入, 还是删除, 都可以看出来, 列表并没有对列表项中的pvOwner进行操作, 这个挂载的才是真正的数据, 具体的操作, 是任务来进行的. 列表只是提供了一个数据存储结构.
?