2019-01-24

FreeRTOS列表及列表项总结

首先说明下FreeRTOS列表及列表项就是所说的链表,链表中的节点就是列表项。对于基础不是很好的想我这样的人一听到链表都感觉有点懵的状态。在C语言里面期初接触到结构体的时候就发懵,接下来我就详细的总结下这块,也是对我学习的一种检验吧。本次记录只是自己学习的一种笔记形式,如有错误欢迎大家指出,带我飞!

结构体:

先说下结构体的概念,结构体是我们把一些相同数据类型或者不同的数据类型集合在一起,成为一种新的数据类型,这样我们叫它为结构体。下面举例说明下:

例如一个学生有很多种信息,姓名,身高,体重,学号,性别等信息,如果我们单独定义的话每一个学生都需要定义一堆变量,这就体现了结构体的好处了。

Typedefstruct man

{

         Char Name[5];                                      //姓名

         Char Sex;                                      //性别

         Unsigned char Tall;                    //身高

         Unsigned char Height;              //体重

         Int Num;                                       //学号

}Student,*pStudent;

这样我们就可以定一个结构体变量了,里面包含这些信息,然后给这些信息来赋值,一个结构体变量代表一个学生,这样定义起来就方便多了。这里的结构体有点像是面向对象语言里面的类,结构体里面的变量类似于类里面的对象。当然结构体还有很多说明的对齐问题,内存问题等,在此不一一赘述了。

链表:

链表就相对复杂了,因为它属于数据结构里面的一种数据储存方式吧,链表是把一些不连续的内存数据连在一起。这里他和数组是有区别的,数组是连续的内存,而且数组的删除和插入是比较耗时的需要移动很多内存中的东西,链表就不是了,下面我详细对链表进行说明。

链表分单向链表和双向链表。

单向链表就是一个根节点然后存放着下一个节点的地址,下一个节点存放着下下个节点的地址,最后的一个节点存放着根节点的地址。具体情况如下图:


下面我来举个例子说明单向链表的一些应用,咱们还是以学生为例子吧,这次就说一个班里面的学生成绩来说明吧。

/* 定义链表节点*/

typedef struct node

{

structnode * pNext;   //节点驱动 存放下一个节点的地址

s8name;                                  //姓名      支持一位名字

u8num;                                    //学号

u8Socer;                                  //学生成绩

}List_Item;


/* 定义链表根节点*/

typedef struct root

{

/* 定义节点驱动点 存放下一个节点地址*/

List_Item* pNext;


/* 定义计数变量 存放该链表节点数*/

u32       ListofNum;

}List_Root;

这样定义一个链表根节点,定义一个链表节点结构体。随着就是我们应用了,首先我们先定义一个链表也就是链表根节点,也就是单向链表的第一个节点,实际上是连接在一起成为一个圆圈,并没有首尾之分,但是我们习惯性的定义一个根节点作为根节点,作为第一个节点。随之定义几个节点,然后去初始化根节点和节点变量。接着就是吧链表连接起来。链表里面有一些应用函数例如:链表的插入、链表的删除、链表的排序等。插入又分成在任意位置插入、在尾部插入和在头部插入。自己下去写程序练习下即可。我个人觉得链表不熟悉就要多画画就明白了。好的说完单向链表我们来说下双向链表。

双向链表将整个链表彻彻底底的构成了一个环,前后都互相连接。如图所示:


接下来我直接截取火哥的资料中的例子来说明;

节点定义


这里面定义了链表中的节点,可以看出来这里面的节点在驱动点上比单向链表多了一个前驱点,用来保存上一个节点的地址。这里是FreeRTOS的标准写法,有节点的辅助值,好用来做排序处理。还保存着任务的控制块及该节点所属于的链表。

根节点定义

链表结构定义,这样做看的更加简洁,起始就是进一步的封装

[if !vml]

[endif]

只要把链表的存放地址和链表的具体链接弄清楚了,链表也就没什么啦,接下来我把FreeRTOS里面的几个对联表操作的函数附上。

[if !vml]

[endif]

[if !vml]

[endif]

[if !vml]

[endif]

[if !vml]

[endif]

小小说明下,这里的链表初始化就不说了,将链表排序插入是为了后面的任务就绪列表,由于任务就绪列表的优先级是数值越小优先级越大,FreeRTOS我们都知道他的任务调度总是再找优先级最高的任务运行,这样做久很方便的调取了。将节点删除是后面的当我的一些任务只运行一次的时候,运行完成我们要讲任务删除掉,也就是吧该任务节点从链表中删除掉。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342