FreeRTOS列表和列表项源码详解

发布时间:2023年12月27日

列表和列表项的结构(回顾)

前文已经详细介绍了, 列表就是FreeRTOS的一种数据结构, 用于挂载各种不同状态的任务, 其实就是双向带头循环链表, 头结点就是列表结构体, 结点就是列表项结构体.

接下来回顾一下列表和列表项的结构.

列表的结构体

列表项的结构体

最小列表项的结构体

结构示意图?

当只有一个头节点的时候

如下所示, 表示了列表中此时没有一个列表项.

?

当列表有一个列表项时

这里数值不对, uxNumberOfItems = 1.??

?

当列表有2个列表项时

?

列表的API函数(回顾)

列表的API函数就是这些基本的, 初始化, 插入, 删除.?

初始化列表?

列表项的数值, 因为作为结尾所以是最大值, portMAX_DELAY就是0xffffffff.??

?列表项初始化

?非常简单, 把Container置0, 也就是此时不属于任何列表的列表项.

列表项升序插入列表(※)

还记得列表项中有一个分配的数值, xItemValue, 就是根据这个来进行升序插入. 此时的列表项里面已经有内容了, 比如阻塞态的列表项, 它的xItemValue就和任务延时的时间有关.

?

?

列表项尾插

?尾插是一种无序的插法, 此时两种情况的插法, 都和pxIndex有关, 插入到pxIndex的前面, 并不一定是列表的最后.

?

?删除列表项

?不管是插入, 还是删除, 都可以看出来, 列表并没有对列表项中的pvOwner进行操作, 这个挂载的才是真正的数据, 具体的操作, 是任务来进行的. 列表只是提供了一个数据存储结构.

?

文章来源:https://blog.csdn.net/qq_46129738/article/details/135224297
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。