欢迎来到天天文库
浏览记录
ID:10899126
大小:51.50 KB
页数:12页
时间:2018-07-08
《freertos任务管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、freertos是一个轻量级的rtos,它目前实现了一个微内核,并且port到arm7,avr,pic18,coldfire等众多处理器上;目前已经在rtos的市场上占有不少的份额。它当然不是一个与vxworks之类的rtos竞争的操作系统,它的目标在于低性能小RAM的处理器上。整个系统只有3个文件,外加上port的和处理器相关的两个文件,实现是很简洁的。与ucosii不同,它是free的,ucosii不是free的,虽然它的代码是公开的。FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理。FreeRTOS内核支
2、持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。这一点是和ucosii不同的。另外一点不同是freertos既可以配置为可抢占内核也可以配置为不可抢占内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核
3、时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。这篇文章是以freertosv5.0版本的代码为例子分析下它的任务管理方面的实现。时间关系可能没有太多时间写的很详细了。1.链表管理freertos里面的任务管理,queue,semaphore管理等都借助于双向链表,它定义了个通用的数据结构/*定义链表节点??*/StructxLIST_ITEM{ portTickTypexItemValue;//链表节点的数据项,通常用在任务延时,表示一个任务延时的节拍数 vola
4、tilestructxLIST_ITEM*pxNext;//通过这两个成员变量将所有节点 volatilestructxLIST_ITEM*pxPrevious;//链接成双向链表 void*pvOwner; //指向该item的所有者,通常是任务控制块 void*pvContainer;//指向此链表结点所在的链表 };/*定义一个链表??*//*一个优先级一个链表??*/这个数据结构定义了一个通用的链表节点;下面的数据结构定义了一个双向链表typedefstructxLIST{ vol
5、atileunsignedportBASE_TYPEuxNumberOfItems;//表示该链表中节点的数目 volatilexListItem*pxIndex;//用于遍历链表,指向上次访问的节点 volatilexMiniListItemxListEnd;//链表尾结点/*指向链表中的最后一个节点?*/}xList;而下面这个数据结构用在xList中,只是为了标记一个链表的尾,是一个markerstructxMINI_LIST_ITEM{ portTickTypexItemValue; volatilestruct
6、xLIST_ITEM*pxNext; volatilestructxLIST_ITEM*pxPrevious;};typedefstructxMINI_LIST_ITEMxMiniListItem;对于链表的操作也定义了一系列的函数和宏,在list.c文件中。如初始化个链表,吧一个节点插入链表等。初始化链表:voidvListInitialise(xList*pxList){ /*Theliststructurecontainsalistitemwhichisusedtomarkthe endofthelist. Toinitial
7、isethelistthelistendisinserted astheonlylistentry.*/ pxList->pxIndex=(xListItem*)&(pxList->xListEnd); /*Thelistendvalueisthehighestpossiblevalueinthelistto ensureitremainsattheendofthelist.*/ pxList->xListEnd.xItemValue=portMAX_DELAY; /*Thelistendnextandpreviouspoint
8、erspointtoitselfsoweknow whenthelistisempty.*/ pxList->xListEnd.pxNext=(xListItem*)&(px
此文档下载收益归作者所有