OpenEdv-开源电子网

标题: FreeRTOS的列表是有序还是无序的?头尾在哪里? [打印本页]

作者: tao475824827    时间: 2020-4-14 12:40
标题: FreeRTOS的列表是有序还是无序的?头尾在哪里?

最近在看FreeRTOS的源码,看到list这里有些不解,向大家请教下:

1、list是有序还是无序的?
因为我看vListInsert是有序插入的,但是vListInsertEnd又是直接插入的,还是说,有的链表要要有序,有的链表只要插进去就行?

2、list的头尾在哪?
看到两种说法,一个就是list自己的end迷你列表项是尾巴。
还有一种就是pxIndex指的是头。
这两种哪种说的对?
初始化的时候pxIndex指的是xListEnd,以后pxIndex会变的,二者并不等价。

作者: ultraelec    时间: 2020-4-14 12:40
1.  链表本身无序,所谓有序是人设计的按某值的权重等规则进行插入/读取/删除表项的操作。是不是有序的,那你就看这个列表有没有提供这种按规则操作列表的有序接口了。如果某列表设计时只提供有序接口,那它必然是有序列表,如果有序接口/无序接口都提供了,那么一个列表实体是有序还是无序靠用户维护。
2. pxIndex用来遍历列表的,xListEnd只不过标记罢了。
在有序列表中,xListEnd.pxNext指向的是头,xListEnd.pxPrevious指向的是尾巴
无序列表中,具体到FreeRTOS中的轮询列表,它不标记逻辑头尾,因为vListInsertEnd()插入时并不是根据xListEnd,而是pxIndex
作者: tao475824827    时间: 2020-4-16 16:54
第一个问题解释应该是(个人理解):
有些是有序的,有些无序的。vListInsert插入的就是升序的,其他的只是表示一个集合,并不依靠顺序来做东西。这些插入会比较快。




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4