嵌入式操纵系统FreeRTOS的原理与实现.docx

上传人:安*** 文档编号:17746621 上传时间:2022-05-26 格式:DOCX 页数:10 大小:20.15KB
返回 下载 相关 举报
嵌入式操纵系统FreeRTOS的原理与实现.docx_第1页
第1页 / 共10页
嵌入式操纵系统FreeRTOS的原理与实现.docx_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《嵌入式操纵系统FreeRTOS的原理与实现.docx》由会员分享,可在线阅读,更多相关《嵌入式操纵系统FreeRTOS的原理与实现.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、嵌入式操纵系统FreeRTOS的原理与实现mahaiyan导语:freertos操纵系统是完全免费的操纵系统,具有源码公开、可移植、可裁减、调度策略灵敏的特点,可以方便地移植到各种单片机上运行在嵌入式领域中,嵌入式实时操纵系统正得到越来越广泛的应用。采用嵌入式实时操纵系统rtos可以更公道、更有效地利用cpu的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。由于rtos需占用一定的系统资源尤其是ram资源,只有c/os-ii、embos、salvo、freertos等少数实时操纵系统能在小ram单片机上运行。相对于c/os-ii、embos等贸易操纵系统,freer

2、tos操纵系统是完全免费的操纵系统,具有源码公开、可移植、可裁减、调度策略灵敏的特点,可以方便地移植到各种单片机上运行,其最新版本为2.6版。1freertos操纵系统功能作为一个轻量级的操纵系统,freertos提供的功能包括:任务治理、时间治理、信号量、消息队列、内存治理、记录功能等,可根本知足较小系统的需要。freertos内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,cpu总是让处于停当态的、优先级最高的任务先运行。freert0s内核同时支持轮换调度算法,系统允许不同的任务使用一样的优先级,在没有更高优先级任务停当的情况下,同一优先级的任务分享cpu的使用时

3、间。freertos的内核可根据用户需要设置为可剥夺型内核或者不可剥夺型内核。当freertos被设置为可剥夺型内核时,处于停当态的高优先级任务能剥夺低优先级任务的cpu使用权,这样可保证系统知足实时性的要求;当freertos被设置为不可剥夺型内核时,处于停当态的高优先级任务只有等当前运行任务主动释放cpu的使用权后才能获得运行,这样可进步cpu的运行效率。2freertos操纵系统的原理与实现2.1任务调度机制的实现任务调度机制是嵌入式实时操纵系统的一个重要概念,也是其核心技术。对于可剥夺型内核,优先级高的任务一旦停当就能剥夺优先级较低任务的cpu使用权,进步了系统的实时响应才能。不同于c

4、/os-ii,freertos对系统任务的数目没有限制,既支持优先级调度算法也支持轮换调度算法,因此freertos采用双向链表而不是采用查任务停当表的方法来进展任务调度。系统定义的链表和链表节点数据构造如下所示:typedefstructxlist/定义链表构造unsignedportshorptusnumberofitems;/usnumberofitems为链表的长度,为0表示链表为空volatilexlistitempxhead;/pxhead为链表的头指针volatilexlistitempxindex;/pxindex指向链表当前结点的指针volatilexlistitemxlis

5、tend;/xlistend为链表尾结点xlist;structxlist_item/定义链表结点的构造portticktypexitemvalue;/xitemvalue的值用于实现时间治理/portticktype为时针节拍数据类型,/可根据需要选择为16位或者32位volatilestructxlist_itempxnext;/指向链表的前一个结点voidpvowner;/指向此链表结点所在的任务控制块voidpvcontainer;/指向此链表结点所在的链表;freertos中每个任务对应于一个任务控制块tcb,其定义如下所示:typedefstructtsktaskcontrolbl

6、ockportstack_typepxtopofstack;/指向任务堆栈完毕处portstack_typepxstack;/指向任务堆栈起始处unsignedportshortusstackdepth;/定义堆栈深度signedportcharpctasknametskmax_task_name_len;/任务名称unsignedportcharucpriority;/任务优先级xlistitemxgenericlistitem;/用于把tcb插入停当链表或者等待链表xlistitemxeventlistitem;/用于把tcb插入事件链表如消息队列unsignedportchaructcb

7、number;/用于记录功能tsktcb;freertos定义停当任务链表数组为xlistpxreadytaskslistsportmax_priorities。其中portmax_priorities为系统定义的最大优先级。假设想使优先级为n的任务进入停当态,需要把此任务对应的tcb中的结点xgenericlistltem插入到链表pxreadytaskslistsn中,还要把xgenericlistitem中的pvcontainer指向pxreadytaskslistsn方可实现。当进展任务调度时,调度算法首先实现优先级调度。系统按照优先级从高到低的顺序从停当任务链表数组中寻找usnumb

8、erofitems第一个不为0的优先级,此优先级即为当前最高停当优先级,据此实现优先级调度。假设此优先级下只有一个停当任务,那么此停当任务进入运行态;假设此优先级下有多个停当任务,那么需采用轮换调度算法实现多任务轮流执行。假设在优先级n下执行轮换调度算法,系统先通过执行pxreadytaskslistsnpxindex=pxreadytasks-listsnpxlndexpxnext语句得到当前结点所指向的下一个结点,再通过此结点的pvowner指针得到对应的任务控制块,最后使此任务控制块对应的任务进入运行态。由此可见,在freertos中,一样优先级任务之间的切换时间为一个时钟节拍周期。以图

9、l为例,设系统的最大任务数为pottmax_priorities,在某一时刻进展任务调度时,得到pxreadytaskslistsiusnumberofitems=oi=2.portmax_priorities以及pxreadytaskslists1。usnumberofitems=3。由此内核可知当前最高停当优先级为l,且此优先级下已有三个任务已进入停当态由于最高停当优先级下有多个停当任务,系统需执行轮换调度算法实现任务切换;通过指针pxlndex可知任务l为当前任务,而任务l的pxnext结点指向任务2,因此系统把pxindex指向任务2并执行任务2来实现任务调度。当下一个时钟节拍到来时,

10、假设最高停当优先级仍为1,由图l可见,系统会把pxindex指向任务3并执行任务3。为了加快任务调度的速度,frecrtos通过变量uctopreadypriotity跟踪当前停当的最高优先级。当把一个任务参加停当链表时,假如此任务的优先级高于uctopreadypriority,那么把这个任务的优先级赋予uctopreadypriority。这样当进展优先级调度时,调度算法不是从portmax_priorities而是从uctopready-priority开场搜索。这就加快了搜索的速度,同时缩短了内核关断时间。2.2任务治理的实现实现多个任务的有效治理是操纵系统的主要功能。freertos

11、下可实现创立任务、删除任务、挂起任务、恢复任务、设定任务优先级、获得任务相关信息等功能。下面主要讨论freertos下任务创立和任务删除的实现。当调用staskcreate函数创立一个新的任务时,freertos首先为新任务分配所需的内存。假设内存分配成功,那么初始化任务控制块的任务名称、堆栈深度和任务优先级,然后根据堆栈的增长方向初始化任务控制块的堆栈。接着,freertos把当前创立的任务参加到停当任务链表。假设当前此任务的优先级为最高,那么把此优先级赋值给变量uctopreadypriorlty其作用见2.1节。假设任务调度程序已经运行且当前创立的任务优先级为最高,那么进展任务切换.不同

12、于c/osii,freertos下任务删除分两步进展。当用户调用vtaskdelete函数后,执行任务删除的第一步:freertos先把要删除的任务从停当任务链表和事件等待链表中删除,然后把此任务添加到任务删除链表,假设删除的任务是当前运行任务,系统就执行任务调度函数,至此完成任务删除的第一步。当系统空闲任务即prvldletask函数运行时,假设发现任务删除链表中有等待删除的任务,那么进展任务删除的第二步,即释放该任务占用的内存空间,并把该任务从任务删除链表中删除,这样才彻底删除了这个任务。值得留意的是,在freertos中,当系统被配置为不可剥夺内核时,空闲任务还有实现各个任务切换的功能。

13、通过比拟c/os-ii和freertos的详细代码发现,采用两步删除的策略有利于减少内核关断时间,减少任务删除函数的执行时间,尤其是当删除多个任务的时候。2.3时间治理的实现freertos提供的典型时间治理函数是vtaskdelay,调用此函数可以实现将任务延时一段特定时间的功能。在freert0s中,假设一个任务要延时xtickstodelay个时钟节拍,系统内核会把当前系统已运行的时钟节拍总数定义为xtickcount,32位长度加上xtickstodelay得到任务下次唤醒时的时钟节拍数xtimetowake。然后,内核把此任务的任务控制块从停当链表中删除,把xtimetowake作为

14、结点值赋予任务的xitemvalue,再根据xtimetowake的值把任务控制块按照顺序插入不同的链表。假设xtimetowakextickcount,即计算中没有出现溢出,内核把任务控制块插入到pxdelayedtasklist链表;假设xtimetowakec/osii提供的内存治理机制是把连续的大块内存按分区来治理,每个分区中包含整数个大小一样的内存块。由于每个分区的大小一样,即使频繁地申请和释放内存也不会产生内存碎片问题,但其缺点是内存的利用率相对不高。当申请和释放的内存大小均为一个固定值时如均为2kb,freertos的方法2内存分配策略就可以实现类似cos的内存治理效果。2.5f

15、reertos的移植freertos操纵系统可以被方便地移植到不同处理器上工作,现已提供了arm、msp430、avr、pic、c8051f等多款处理器的移植。frcertos在不同处理器上的移植类似于c/0s一ii,故本文不再详述freertos的移植。此外,tcp/ip协议栈ip已被移植到freertos上,详细代码可见freertos网站。2.6freertos的缺乏相对于常见的c/osii操纵系统,freertos操纵系统既有优点也存在缺乏。其缺乏之处,一方面表达在系统的效劳功能上,如freertos只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,fr

16、eertos只是一个操纵系统内核,需外扩第三方的gui图形用户界面、tcp/p协议栈、fs文件系统等才能实现一个较复杂的系统,不像c/os-ii可以和c/gui、c/fs、c/tcp-ip等无缝结合。3结论作为一个源码公开的操纵系统,学习freertos可以更好地把握嵌入式实时操纵系统的实现原理;作为一个免费的操纵系统,采用freertos可在根本知足较小系统需要的情况下降低系统本钱、简化开发难度。在理论中,采用freertos操纵系统和msp430单片机构成的温度控制系统稳定可靠,实现了较好的控制效果。相信随着时间的开展,freertos会不断完善其功能,以更好地知足人们对嵌入式操纵系统实时性、可靠性、易用性的要求。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁