freertos任务管理

freertos任务管理

ID:10899126

大小:51.50 KB

页数:12页

时间:2018-07-08

freertos任务管理_第1页
freertos任务管理_第2页
freertos任务管理_第3页
freertos任务管理_第4页
freertos任务管理_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。