FreeRTOS系列[三]源代码分析 list
FreeRTOS里面实现了一个链表用来存储任务信息,这个链表也可以被用户程序使用。
##链表是什么?
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
学习数据结构的时候,第一个可能就是学习的链表,学习C语言的指针部分的时候,也可能会提到链表。
FreeRTOS里面链表
先看看头文件里面链表结构体的定义吧。
下面有许多的宏定义,其中一个引起我特别注意的是下面这个宏
是不是觉得这个宏定义看起来像一个函数呢? 却是用宏定义的方式写的,为什么要这么做呢?
这个应该是为了效率的因素。因为调用函数的时候,需要从目前的指令地址跳转到子函数的地址
执行,然后再跳回来,这个过程也是需要耗费指令时间的,如果直接将代码插入到需要执行的地
方,就不需要跳来跳去了。其实对于C++的使用者或者是C99的使用者,可以利用内联函数的方式
实现同样的功能,FreeRTOS之所以使用宏来实现估计是为了兼容老式的C语言编译器。
链表的主要操作有如下几个:
- 初始化链表。
- 插入链表元素
- 删除链表元素
这几项操作都是用函数的方式定义的。具体的代码我就不列举了,FreeRTOS的源代码有很好的注释,而且链表的操作是每一个讲到数据结构的书都会写的。
本站采用
知识共享署名-非商业性使用-相同方式共享3.0 中国大陆许可协议
进行许可,转载请注明出处。
推荐使用 chrome 浏览器浏览本站。