从零开始,教你写FreeRTOS双向链表

发布于:2023-01-11 ⋅ 阅读:(681) ⋅ 点赞:(0)

摘要:前几天给大家讲了单向链表,今天再结合FreeRTOS的链表源码,说一下双向链表。

注:链表项就是节点,节点就是链表项,都是指的一个东西,叫啥都无所谓。

一、定义链表结构体

二、定义mini节点项

迷你节点也是节点,但迷你节点仅用于标记链表的末尾和挂载其他插入链表中的节点,用户是用不到迷你节点的,链表头节点和普通节点可以不一样。

 下面这个头即使链表定义,也是链表头,链表头节点和普通节点可以不一样。

三、定义节点

节点在FreeRTOS中叫做链表项。

 

四、初始化链表

初始化链表就是给链表的头结点各个参数赋值。

 

                                                         左右两个图意思都一样

五、初始化节点

 

 

六、将节点插入到链表的尾部

此函数就是将待插入的列表项插入到列表 pxIndex 指向列表项的前面,要注意的时,pxIndex 不一定指向 xListEnd,而是有可能指向列表中任意一个列表项。

我手画一张图来解释吧!

 

七、链表节点插入并排序

 在将待插入列表项插入列表之前,会前遍历列表,找到待插入列表项需要插入的位置。待插入列表项需要插入的位置,是依照列表中列表项的值,按照升序排序确定的。

八、删除链表节点

 要删除节点,首先就必须要找到节点。

 

需要注意的是,函数 uxListRemove()移除后的列表项,依然于列表有着单向联系,即移除后列表项中用于指向上一个和下一个列表项的指针,依然指向列表中的列表项。

九、实例

 然后随便找个32的代码,用keil仿真试一试。

 仔细看一下这张图:

这个其实就是FreeRTOS的链表源码,是不是很简单?

工程下载源码:

请进学习技术大群领取资料包:607439754

其实这个工程是一个普通的裸机例程,只是加入了FreeRTOS的链表源码,建议大家自己动手试一下,深入理解链表。因为要想学好任何一个RTOS,必须掌握的基础知识就是链表和队列!

【网盘免费资料包,需要的自行领取】:

嵌入式物联网 22个STM32项目、大赛作品,【华清远见发放资料包】http://makerschool.mikecrm.com/f4wjYBB【下方分享一些免费教程资料,感兴趣的可以看一下】:

FreeRTOS内核源码深度剖析

智能插排项目:FreeRTOS+LwIP

操作系统FreeRTOS

一节课带你入门FreeRTOS

( STM32+LoRa打造LPWA物联网系统)


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章