定义习惯
变量
将变量类型缩写当作前缀,如无符号字符uc,字符指针pc,数据结构、任务句柄等用x
函数
返回值类型缩写当作前缀,如无返回v,私有函数加pri前缀
宏定义
宏定义大写,所在头文件名字缩写为前缀,小写。(信号量函数是宏定义,但命名按函数定义)
通用宏定义
链表实现
节点定义
根节点:根节点实际上就是一个链表(或者说链表头),所以其为第一个节点同时也是最后一个节点。属性有:链表上的节点个数(不包括根节点)、索引值(用来遍历节点,指向入口节点)、最后一个节点(本质是精简节点MINIitem):根节点自身item,和普通节点一样有辅助值、前一节点后一节点。
节点:属性为辅助排序值(确定该节点在链表中顺序,作用是确定优先级进行排序)、前一个节点、后一个节点、owner(挂载的TCB结构体)、container(节点所在链表)
节点初始化
根节点初始化:初始化时由于没有其他节点,则前一个节点和后一个节点都指向自身,index索引值指向最后一个节点即同样指向自身,链表上挂载节点数为0,根节点自身排序为最大MAX
节点初始化:节点初始化时不挂载任何链表,即container = NULL
向链表添加节点
链表尾部添加节点
尾部添加涉及到三个节点的属性更改
新节点:新节点的前一个节点为根节点原前一个节点,即NewItem->pxPrevious = pxIndex->pxPrevious;新节点的前一个节点为根节点,即NewItem->pxNext = pxIndex;同时新节点挂载链表为指定链表,即container = list。
根节点原前一个节点:作为根节点原前一个节点,其下一个节点不再是第一个节点即根节点,而是插入的新节点,即pxIndex->pxPrevious->pxNext = NewItem
根节点:根节点前一个节点将变成新节点,即pxIndex->pxPrevious = NewItem;同时链表节点计数器加一
按辅助顺序值添加节点
设置一个临时节点iterator,使用for循环进行遍历,当iterator的下一个节点的辅助值大于要添加的节点的顺序值时,则将新节点位置确定在iterator和iterator->next之间。
创建任务
所谓创建任务,其实就是给TCB对象内属性初始化
首先看TCB结构体
typedef struct tasTaskControlerBlock { volatile StackType_t *pxTopOfStack; //栈顶 ListItem_t xStateListItem; //任务节点(链表项) StackType_t *pxStack; //任务栈起始地址 char pcTaskName[configMAX_TASK_NAME_LEN]; //任务名称 }tskTCB; typedef tskTCB TCB_t;
可以看到TCB结构体内有栈顶、栈起始地址、任务节点即链表项、任务名称。我们要做的就是对这四个值进行赋值初始化
标签:初始化,刘火良,freertos,一个,链表,内核,TCB,节点,定义 From: https://www.cnblogs.com/toriyung/p/16837371.html