FreeRTOS - 链表机制
1. 链表操作的难点:指针
理解了指针,对于链表就容易理解了。
2个口诀:
- 变量变量,能变,就是能读能写,必定在内存里(RAM)
- 指针指针,保存的是地址,32位处理器中地址都是32位的,无论是什么类型的指针变量,都是4字节
2. FreeRTOS的链表代码分析
2.1 实现链表节点
节点就是链表项
2.1.1. 链表节点数据结构
2.1.2 链表节点初始化
2.2 链表根节点
2.2.1 链表根节点数据结构
- uxNumberOfItems:用于表示该链表下有多少个结点,根节点除外
- pxIndex:指向当前正在使用的item,这个pxIndex被用来遍历链表
- xListEnd:链表是首尾相连的,是一个圈,首就是尾,尾就是首,从字面上理解就是链表的最后一个节点,实际上也是链表的第一个节点。数据类型是一个精简的节点。
2.2.2 根节点的初始化
2.2.3 将节点插入到链表的尾部
将节点插入到链表的尾部(可以理解为头部)就是将一个新的节点插入到一个空的链表。
2.2.4 将节点按升序排列插入到链表
如果有两个节点的值相同,则新节点在旧节点的后面插入。
2.2.5 将节点从链表中删除
假设将一个有三个节点的链表中的中间节点删除。
2.3 链表示意图
在上图中,链表中元素是顺序是:item1、item2、item3、xListEnd。
list中有一个pxIndex,指向当前真在使用的item。链表的遍历过程如下:
- pxIndex初始时指向xListEnd
- 要取出第一个元素时,pxIndex就会指向item1
- 再取出下一个元素时,pxIndex就会指向item2
- 再取出下一个元素时,pxIndex就会指向item3
- 再取出下一个元素时,pxIndex就会指向xListEnd
- 发现它是xListEnd时,继续去下一个元素,pxIndex就会指向item1