(二)FreeRTOS列表及列表项

       FreeRTOS管理任务中一个相当重要的数据结构就是列表和列表项,FreeRTOS创建完成后,是一个个独立的个体,如果没有一个约束的关系,那么调度器是是无法分配的,列表和列表项将这些独立的任务的串起来,然后调度器根据每个列表项中的信息来决定哪个任务获得CPU使用权。

列表:在FreeRTOS中用以跟踪任务,在源码中的结构也是比较简单的

缩减后就是一个简单的表格:

   在FreeRTOS中,一个列表下面有多个列表项,而列表项又分为普通列表项和迷你列表项

   列表项结构体源码:

      

         迷你列表项结构的出现符合了FreeRTOS操作系统精简的特点,有些时候并不需要列表那么大一个数据结构,只需要保存一些资源,就可以使用迷你列表项

迷你列表项源码:

 

列表初始化:列表项初始化中并没有对每个成员进行初始化,只是简单地将列表项的运行管理者置为空,其它成员变量是在运行过程中进行初始化      

   列表初始化后应该是这个样子的:

 

列表操作:插入、删除

(一)尾插法

        列表项的插入过程就是一个双向链表的建立过程,列表项的插入位置由列表项中的列表项值来确定的,所以先获得这个值,如果该值等于系统规定的列表项值,则直接将该列表项插入末尾,如若不是,需要遍历(按照升序的方法),找出该列表项的位置。最后就是指明列表项的运行将由哪个列表管理,以及列表中的列表项数量加1.

举个例子:插入一个列表项值为xItemValue 为 1,2,3的列表项

(二)头插法

       这里不再是根据列表项中的值来确定列表项插入的位置,而是根据列表头,来将新的列表项插入到列表头的前面去,因为是一个双链表,插入到列表头的前面,也就是插入到列表的尾部,不用去遍历。

插入过程:

(三)删除(五个步骤):

  1. 找到所在的列表
  2. 利用双链表删除某个节点的方法将要删除的节点的上下列表项相连接
  3. 如果当前列表的索引为要删除的列表项,则选择当前列表项的上一个列表项作为当前的索引
  4. 被删除的列表项的pvContainer置为NULL
  5. 列表数目减1,并返回

 (四)遍历:

       列表项遍历是一个宏定义,宏定义内实现遍历链表,然后找到下一个节点,即列表项。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章