北京哪家医院看皮肤病白癜风最好 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/bdf/##热爱记录、钟爱分享、酷爱生活
一、前言
本期文章讲解FreeRTOS实时操作系统源码,主要是源码分析,实操很少。FreeRTOS在嵌入式领域中应用越来越多,在硬件资源有限的情况下,使用FreeRTOS可以做到实时响应时间,实时处理事件。相比传统的轮询系统和前台系统有着不一样的性能。
FreeRTOS中存在大量的基础数据结构链表和链表的操作,了解掌握链表有助于实操时可以入手改写代码。
链表的节点本来不是用来存储大量的数据,但是可以使用指针挂载很对数据。被挂载的数据结构可以是单个数据、数组、指针数据和自定义的结构体数据类型。链表最大的作用是通过节点将离散的数据链接在一起,组成一个表。主要对链表完成插入和删除操作。
FreeRTOS源码与链表相关的文件是list.c和list.h两个文件。本期文章FreeRTOS源码采用V9.0.0版本,源码可以在sourceforge上找到。
相关路径:
FreeRTOSv9.0.0\FreeRTOS\Sourc\list.c
FreeRTOSv9.0.0\FreeRTOS\Sourc\include\list.h
二、C语言链表
1、单向链表(首尾相连)
该链表中共有n个节点,前一个节点都有一个箭头指向后一个节点,首尾相连,组成一个圈。节点都是一个自定义类型的数据结构,在这个数据结构里面可以有单个的数据、数组、指针数据和自定义的结构体数据类型等等信息,通常的做法是节点里面只包含一个用于指向下一个节点的指针。要通过链表存储的数据内嵌一个节点即可,这些要存储的数据通过这个内嵌的节点即可挂接到链表中。
2、双向链表
双向链表与单向链表的区别就是节点中有两个节点指针,分别指向前后两个节点,其它完全一样。
3、链表和数组
链表是通过节点把离散的数据链接成一个表,通过对节点的插入和删除操作从而实现对数据的存取。而数组是通过开辟一段连续的内存来存储数据。
三、FreeRTOS的链表
1、定义链表节点结构xLIST_ITEM。
xItemValue;辅助值,用于帮助节点做顺序排列
pxNext;指向链表下一个节点
pxPrevious;指向链表前一个节点
pvOwner;指向拥有该节点的内核对象,通常是TCB(任务控制模块)
pvContainer;指向该节点所在的链表
链表节点初始化vListInitialiseItem函数。
2、实现链表根节点
链表根节点数据结构xLIST。
uxNumberOfItems;链表节点计数器
pxIndex;链表节点索引指针
xListEnd;链表最后一个节点
链表精简节点结构体xMINI_LIST_ITEM。
xItemValue;辅助值,用于帮助节点做升序排列
pxNext;指向链表下一个节点
pxPrevious;指向链表前一个节点
链表根节点初始化vListInitialise函数。完成如下功能:
将链表索引指针指向最后一个节点;
将链表最后一个节点的辅助排序的值设置为最大,确保该节点就是链表的最后节点;
将最后一个节点的pxNext和pxPrevious指针均指向节点自身,表示链表为空;
初始化链表节点计数器的值为0,表示链表为空。
3、主要操作函数
将节点插入链表的尾部vListInsertEnd函数。完成的流程图如下:
将节点按照升序排列插入链表vListInsert函数,完成的流程图如下:
将节点从链表删除uxListRemove函数。流程图如下:
4、节点带参数宏函数。
实时
初始化节点的拥有者。
获取节点拥有者。
初始化节点排序辅助值。
获取节点排序辅助值。
获取链表根节点的节点计数器的值。
获取链表的入口节点。
获取节点的下一个节点。
获取链表的最后一个节点。
判断链表是否为空。
获取链表的节点数。
获取链表第一个节点的OWNER,即TCB。
获得对应任务控制块。
判断该节点是否在该链表中。
返回指向该节点所在的链表地址。
判断链表是否被初始化。
单选
FreeRTOS源码讲解是否有用
有无打开百度APP进行投票
「嵌入式文件系统(一)」文件系统概念和实操环境搭建
「嵌入式文件系统(二)」ext2
「嵌入式文件系统(三)」ext3和ext4
「嵌入式文件系统(四)」jffs2和cramfs
#王力宏前妻李靓蕾发文#