FreeRTOS列表和列表项
列表和列表项是FreeRTOS的一个数据结构,是FreeRTOS的基石。
1. 什么是列表和列表项?
1.1 列表list
- 列表在概念上类似双向链表,用来追踪FreeRTOS中的任务。
/*
* Definition of the type of queue used by the scheduler.
* 任务调度器使用的队列的定义
*/
typedef struct xLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE
volatile UBaseType_t uxNumberOfItems; /* 用来记录列表中列表项的个数,其中不包含末尾列表项。 */
ListItem_t * configLIST_VOLATILE pxIndex; /* 用来记录当前列表项的索引号,用于遍历列表。 */
MiniListItem_t xListEnd; /* 末尾列表项(迷你列表项),用来表示列表的结束。 */
listSECOND_LIST_INTEGRITY_CHECK_VALUE
} List_t;
1.2 列表项list item
- 列表项指存放在列表中的对象,FreeRTOS提供了2个类型:列表项和迷你列表项。
/*
* Definition of the only type of object that a list can contain.
* 定义列表可以包含的唯一对象类型
*/
struct xLIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
configLIST_VOLATILE TickType_t xItemValue; /* 列表项的值,这用于按升序对列表进行排序 */
struct xLIST_ITEM * configLIST_VOLATILE pxNext; /* 指向下一个列表项 */
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /* 指向上一个列表项 */
void * pvOwner; /* 指向包含列表项的对象(通常是TCB)的指针。*/
struct xLIST * configLIST_VOLATILE pxContainer; /* 用来记录此列表项属于哪个列表。 */
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
};
typedef struct xLIST_ITEM ListItem_t;
#if ( configUSE_MINI_LIST_ITEM == 1 ) /* 若为1,则为普通列表项,若为0,则为迷你列表项。 */
struct xMINI_LIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
configLIST_VOLATILE TickType_t xItemValue; /* 列表项的值,这用于按升序对列表进行排序 */
struct xLIST_ITEM * configLIST_VOLATILE pxNext; /* 指向下一个列表项 */
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /* 指向上一个列表项 */
};
typedef struct xMINI_LIST_ITEM MiniListItem_t;
#else
typedef struct xLIST_ITEM MiniListItem_t;
#endif