摘要:前几天给大家讲了单向链表,今天再结合FreeRTOS的链表源码,说一下双向链表。
注:链表项就是节点,节点就是链表项,都是指的一个东西,叫啥都无所谓。
一、定义链表结构体
二、定义mini节点项
迷你节点也是节点,但迷你节点仅用于标记链表的末尾和挂载其他插入链表中的节点,用户是用不到迷你节点的,链表头节点和普通节点可以不一样。
下面这个头即使链表定义,也是链表头,链表头节点和普通节点可以不一样。
三、定义节点
节点在FreeRTOS中叫做链表项。
四、初始化链表
初始化链表就是给链表的头结点各个参数赋值。
左右两个图意思都一样
五、初始化节点
六、将节点插入到链表的尾部
此函数就是将待插入的列表项插入到列表 pxIndex 指向列表项的前面,要注意的时,pxIndex 不一定指向 xListEnd,而是有可能指向列表中任意一个列表项。
我手画一张图来解释吧!
七、链表节点插入并排序
在将待插入列表项插入列表之前,会前遍历列表,找到待插入列表项需要插入的位置。待插入列表项需要插入的位置,是依照列表中列表项的值,按照升序排序确定的。
八、删除链表节点
要删除节点,首先就必须要找到节点。
需要注意的是,函数 uxListRemove()移除后的列表项,依然于列表有着单向联系,即移除后列表项中用于指向上一个和下一个列表项的指针,依然指向列表中的列表项。
九、实例
然后随便找个32的代码,用keil仿真试一试。
仔细看一下这张图:
这个其实就是FreeRTOS的链表源码,是不是很简单?
工程下载源码:
请进学习技术大群领取资料包:607439754
其实这个工程是一个普通的裸机例程,只是加入了FreeRTOS的链表源码,建议大家自己动手试一下,深入理解链表。因为要想学好任何一个RTOS,必须掌握的基础知识就是链表和队列!
【网盘免费资料包,需要的自行领取】:
嵌入式物联网 22个STM32项目、大赛作品,【华清远见发放资料包】http://makerschool.mikecrm.com/f4wjYBB【下方分享一些免费教程资料,感兴趣的可以看一下】: