FreeRTOS列表与列表项的介绍

本文详细介绍了RTOS中任务状态的四种列表(挂起、运行、阻塞、就绪)如何通过双向循环链表实现,以及列表项的数据结构,包括值的存储和排序依据。同时,讨论了任务句柄的概念及其在任务操作中的作用。最后概述了列表操作函数,如初始化和插入功能。
摘要由CSDN通过智能技术生成

1.列表

我们在之前的任务分类中介绍过任务的分类,挂起,运行,阻塞,就绪这四个任务状态。而RTOS中用什么保存这四个列表中的任务呢?采用的就是列表,说是说列表,其实采用的就是数据结构中带头双向循环链表,不过这个哨兵节点变成尾节点。四个状态的任务分别用四个链表保存,链表中的节点是双向循环。链表信息的的数据结构如下

第一行与第五行是用于检验宏定义。第二行表示列表中的元素个数。第三行是指向列表,类似于链表的头指针,丢失了头指针就丢失了访问链表的能力。第四行是一个哨兵节点,这个节点不保存任何信息,用于标识链表的结束。(注:哨兵节点不计入节点个数)

2.列表项

列表项就很好理解了,这就是链表中的每一个节点。他的数据结构如下

同上,第一行与最后一行都是安全检测的宏定义,第二行是这个是这个节点的值,这个值一般存放什么呢?比如说我们阻塞列表中的列表项,之前说过阻塞列表中存放的是正在Delay的函数,而Delay了多少毫秒呢?这个数据就可以作为阻塞列表排序的依据。列表项的值就是列表排列的依据。而三四行就显而易见了。双向链表的两个指针。第五行的值就是链表的内容了,在这里是任务,所以说存放的就是任务控制块,笔者在这里认为他应该和任务句柄类似。

任务句柄:这个在我理解看来,

每个任务都有自己的信息和特点,而任务句柄数据结构本质其实是一个指针,它指向这个任务包含任务特点的首地址,在我们使用创建任务时,传入创建任务函数的其实是任务句柄的地址,说明要改变任务句柄的指向,即给这个指针赋值。在其他函数中,挂起删除解挂等函数操作其实都是操作这个任务句柄,其中删除就是把这个任务句柄赋值为NULL。

反正简单来说就是把链表中的信息换成了任务信息。而第六行则是这个列表项应该处于的列表,即辨识它应该所处的列表。

3.列表操作函数介绍

这个函数是对列表本身信息数据结构的初始化函数

                             

这个是对每个列表元素(列表项)的初始化

这个是将列表项用尾插法插入列表中。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值