《MCU跑RTOS相比裸机的优势.docx》由会员分享,可在线阅读,更多相关《MCU跑RTOS相比裸机的优势.docx(12页珍藏版)》请在优知文库上搜索。
1、经常.有读者何关于RTOS的问题,比如:我现在要不要学习RTOS?学习RTOS有什么好处?我的项目要不要蹈RTas?问这些问题,其实归根结底还是对RTOS理解的不够,项目开发的经验还不足等。针对这部分朋友,今天分享几点相关内容:嵌入式系统中,有很多方式实现任务调度,功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且发杂时,开发者应该考虑使用实时操作系统RTOS.下面给大家分享几点RTOS相比裸机的优势:1 .硬实时响应基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度.有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的晌应,2 .系统性能最大化针对大型的
2、、或杂的嵌入武应用,使用一个事件第动的RToS来替代基于轮谕的超箱环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。3 .降低反杂度RTOS允许应用划分为一个个小的自主运行的任务.任务执行自己的上下文中,不依腺其它任务或调度器.4 .高峰负或管理RTOS提供了为管理系统高峰活动提供了一个有效的方法.更高的优先级分配给执行峥值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟.工紧密集成的中间件RToS的模块化设计使得它可以很容易的增加中间件.中间件组件以任务和明动的方式增加.他们使用RTOS提供的资源与其它任务通信.基于相应的事件被R
3、TOS询度.6 .更大的开发团队每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号道等)来定义输入输出.将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目.7 .易于调试和验证系统划分为功能明确的任务,不依赖其它任务。在整个系统失成之前,可以很容易的调试和验证每个任务.8 .代码Ift用RToS系统中的模块化设计,鼓励将软件功能创建为独立的、聆证过的任务,其独立性使用在其它设计中用用这些模块变得很简单.现在ZCU资源相比以前更多了,很多场景都适合跑RToS,当然,也有少部分场景跑裸机就够了。为了让更多小伙伴明白裸机和RTOS,我们再来分享一下裸机系统和RToS多线程
4、系统的原理.逻辑系统裸机系统通常分成轮询系统和前后台系统。U轮询系统轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循M.顺序地做各种事情,大概的伪代码具体如代码清单所示:intmain(void)/*硬件相关初始化*/HardBare1.nitO:/*无限循环*/for(;:)(/*处理事情1/DoSoinething1.():/*处理事情2/DoSoincthingg2();/处理事情3*/DoSomethinggSO:)轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顽序执行代码F1.不需要外部事件来驱动的就能完成的事情.在代码清单IT中,如果
5、只是实现1.ED晶转,申口输出,液品显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按出操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。假设DoSomcthinag3是按键扫描.当外部按裸被按下,相当于一个警报,这个时候,需要立马响应,并做紧急处理,而这个时候程序刚好执行到DOSOmCIhing81,要命的是DOSomethingR1.需要执行的时间比较久,久到按键和放之后都没有执行完毕,那么当执行到DoSomethinggS的时候就会丢失掉一次事件.足见,轮询系统只适合顺序执行的功能代码,当有外部事件骈动时,实时性就会降低。2、前后台系
6、统相比轮询系统,前后台系统是在轮询系统的挺础上加入了中断。外部事件的阴应在中断里面完成.事件的处理还是回到轮训系统中完成,中断在这里我们称为前台,main函数里面的无限筛环我们称为后台,大概的伪代玛见代码清单所示:intf1.ag1.=0;intf1.ag2=0:intf1.ag3=0;intmain(void)/硬件相关初始化/HardWare1.nitO:/*无限循M*/if(f1.ag1.)/*处理事情I/DoSomething1.();if(f1.ag2)/*处理事情2*/DoSomcthingRZO:if(f1.ag3)/*处理,情3*/DoSomethingg3():/置位标志位/
7、f1.ag1.=1;/*如果事件处理时间很短,则在中断里面处理如果事件处理时间比较长,在回到后台处理*/DoSomething1.():)voidISR2(void)/置位标志位*/f1.ag2=2:/*如果事件处理时间很短,则在中断里面处理如果事件处理时间比较长,在回到后台处理*/DoSomethingZO:voidISR3(void)/置位标志位*/f1.ag3=1;/*如果事件处理时间很加.,则在中断里面处理如果零件处理时间比较长,在回到后台处理*/DoSomething3();在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流.转而去执行中断服务程序,在中断服
8、务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果,件要处理的事情比较多,则返回到后台程序里面处理.显然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌亮的功能,这可以大大的提高程序的实时响应能力.在大多数的中小型项目中,前后台系统运用的好.堪称有操作系统的效果.多线程系统相比前后台系统,多线程系统的,件响应也是在中断中完成的,但足事件的处理是在线程中完成的.在多线程系统中.线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。当-个紧急的事件在中断被标记之后,如果事件时应的线程
9、的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性乂被提岛了.多线程系统大概的伪代码具体见代码清单所示:intf1.ag1.=0:intf1.ag2=0:intf1.ag3=0;intmain(void)/*硬件相关初始化*/HardiareInit();/OS初始化*/RTOS1.nitO:/OS启动,开始多线程调度,不再返回/RTOSStartO;/置位标志位/f1.ag1.=1;void1.SR2(voi1.)/置位标志位*/f1.ag2=2:void1.SR3(void)/置位标志位*/f1.ag3=1;voidDoSomething1.(Void)/*无限循环,不能
10、返回*/if(f1.ag!)(voidDoSomething2(void)*无限循W,不能返回/for(:)/线程实体/if(f1.ag2)voidDoSomething3(void)/无限循环,不能返回*/相比前后台系统中后台喉序执行的程序主体,在多线程系统中,根据程序的功能.我们把这个程序主体分割成一个个独立的,无限循环I1.不能返回的小程序,这个小程序我们称之为线程.每个线程都是独立的,互不T扰的,且具备自身的优先级,它由操作系统调度管理.加入操作系统后,我们在痂程的时候不需要精心地去设计程序的执行流,不用担心每个功镇模块之间是否存在干扰.加入了操作系统,我们的编程反而变斛简单了.整个系统随之带来的额外开销就是操作系统占据的那一丁点的Ir1.ASH和RAM.现如今,单片机的F1.ASH和RAM是越来越大,完全足以抵挡RTOS那点开销.轮询、前后台和多线程系统软件模型区别:模型事件响应事件处理特点轮询系统主程序主程序轮询响应事件.轮询处理事件前后分系统中断主程序实时响应事件.轮询处理事件多线程系统中断线程实时响应小件实时处理巾件