正点原子FreeRTOS学习笔记——列表与列表项

目录

一、什么是列表和列表项

1、概念

2、FreeRTOS代码

(1)列表

(2)列表项

(3)迷你列表项 

二、列表与列表项初始化

1、列表初始化

2、列表项初始化

三、列表插入与删除列表项

1、原理解释

2、升序插入列表项

3、末尾插入列表项

4、移除列表项


一、什么是列表和列表项

1、概念

在FreeRTOS中,有三个列表分别是就绪列表、阻塞列表与挂起列表。当任务状态改变就会迁移到其他列表中。

列表是一个双向环形链表,而链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表可以任意的插入与删除节点,并且不限制元素的数量。

列表项是存放在列表中的项目,用来存放FreeRTOS中的任务。

以右图举例,三个人组成的整体就作为一个列表,而每个人是这个列表中的列表项。列表项之间地址是非连续,是人为的连接到一起的。是依靠列表项中的pxNext(指向下一个地址指针)、pxPrevious(指向上一个地址指针)互相连接。相当于右图中的胳膊互相拉着。     

2、FreeRTOS代码

(1)列表

typedef struct xLIST
{
    listFIRST_LIST_INTEGRITY_CHECK_VALUE      /*用来检测列表完整性*/
    volatile UBaseType_t uxNumberOfItems;     /*列表中列表项个数*/
    ListItem_t * configLIST_VOLATILE pxIndex; /*指向列表项的指针 */
    MiniListItem_t xListEnd;                  /*末尾列表项,由迷你列表项定义*/
    listSECOND_LIST_INTEGRITY_CHECK_VALUE     /*用来检测列表完整性*/
} List_t;

(2)列表项

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;                                     /*任务控制块 */
    struct xLIST * configLIST_VOLATILE pxContainer;     /*列表项所在列表 */
    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE          /*校验值 */ 
};
typedef struct xLIST_ITEM ListItem_t;                    


(3)迷你列表项 

struct xMINI_LI
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值