FreeRTOS列表和列表项
一:列表与列表项定义
FreeRTOS列表和列表项是FreeRTOS的一个数据结构,类似于链表。
FreeRTOS大量使用了列表和列表项,它是FreeRTOS中的基石,方便我们学习FreeRTOS的源码和原理。
列表被用于跟踪FreeRTOS的任务,列表结构为List,再文件list.h中定义
二.列表项初始化
三.列表项相关API函数
四.列表实验
1.建立列表任务
我使用的是动态任务
2.新建列表和列表项
列表初始化
在list.c中找到初始化列表函数,void vListInitialise( List_t * const pxList );添加到列表任务中
去list.h中找列表结构体,将List_t复制,去,main中建立结构体
将新建的结构体名添加到void vListInitialise( List_t * const pxList );参数中
建立列表项
去初始化列表项(相当于节点),也在list.c中找到函数void vListInitialiseItem( ListItem_t * const pxItem ),在main中建立三个列表项
列表项也需要去定义,在list.h中,复制到main中建立
建立后参数放到相应函数中
打印地址看关系
列表项连起来之后是一个环形列表,排序是根据器直径,所以要去赋值。此时还没有建立起来,先把其地址打出来看看
此时没有建立列表,所以ListItem1、2、3地址是和索引地址不一样的
插入列表项
插入函数在list.c void vListInsert( List_t * const pxList,ListItem_t * const pxNewListItem )
第一个参数列表 ,第二个参数新的列表项
两个参数共同决定往哪个列表里插入哪个列表项
插入之后的关系图
打印相关地址看关系
列表项的索引TestList->pxIndex 没有改动是指向迷你列表项的
由图知道,插入列表项一后迷你列表项的下一个地址是列表项1,列表项1的下一个地址是迷你列表项。列表项1的前一个是迷你列表项,迷你列表项的前一个是列表项1.由此可以知道他们是环状的,两个人手拉手。