MCU跑RTOS相比裸机的优势_第1页
MCU跑RTOS相比裸机的优势_第2页
MCU跑RTOS相比裸机的优势_第3页
MCU跑RTOS相比裸机的优势_第4页
MCU跑RTOS相比裸机的优势_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

经常有读者问关于RTOS的问题,比如:我现在要不要学习RTOS?学习RTOS有什么好处?我的项目要不要跑RTOS?问这些问题,其实归根结底还是对RTOS理解的不够,项目开发的经验还不足等。针对这部分朋友,今天分享几点相关内容:嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现小系统的功能。当软件设计变得庞大且复杂时,开发者应该考虑使用实时操作系统RTOS。下面给大家分享几点RTOS相比裸机的优势:1.硬实时响应基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。有严格时序限制的任务可以优先执行,提高应用程序对时间关键事件的响应。2.系统性能最大化针对大型的、复杂的嵌入式应用,使用一个事件驱动的RTOS,来替代基于轮询的超循环结构,可以生成一个更有效的设计,更小的存储占用,应用可以获得更多的处理器时间。3.降低复杂度RTOS允许应用划分为一个个小的自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。4.高峰负载管理RTOS提供了为管理系统高峰活动提供了一个有效的方法。更高的优先级分配给执行峰值负载活动的任务,确保他们在临界时间内访问处理器,在此期间,较低优先级的任务被延迟。5.紧密集成的中间件RTOS的模块化设计使得它可以很容易的增加中间件。中间件组件以任务和驱动的方式增加。他们使用RTOS提供的资源与其它任务通信。基于相应的事件被RTOS调度。6.更大的开发团队每个任务可以被认为是一个项目。通过RTOS提供的资源(队列、信号量等)来定义输入输出。将系统定义为一个个的任务,可以更容易的部署更多开发人员到一个项目。7.易于调试和验证系统划分为功能明确的任务,不依赖其它任务。在整个系统集成之前,可以很容易的调试和验证每个任务。8.代码重用RTOS系统中的模块化设计,鼓励将软件功能创建为独立的、验证过的任务。其独立性使得在其它设计中重用这些模块变得很简单。现在MCU资源相比以前更多了,很多场景都适合跑RTOS,当然,也有少部分场景跑裸机就够了。为了让更多小伙伴明白裸机和RTOS,我们再来分享一下裸机系统和RTOS多线程系统的原理。逻辑系统裸机系统通常分成轮询系统和前后台系统。1、轮询系统轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体如代码清单所示:intmain(void){/*硬件相关初始化*/HardWareInit();/*无限循环*/for(;;){/*处理事情1*/DoSomething1();/*处理事情2*/DoSomethingg2();/*处理事情3*/DoSomethingg3();}}轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单1-1中,如果只是实现LED翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。假设DoSomethingg3是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响应,并做紧急处理,而这个时候程序刚好执行到DoSomethingg1,要命的是DoSomethingg1需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到DoSomethingg3的时候就会丢失掉一次事件。足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。2、前后台系统相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main函数里面的无限循环我们称为后台,大概的伪代码见代码清单所示:intflag1=0;intflag2=0;intflag3=0;intmain(void){/*硬件相关初始化*/HardWareInit();/*无限循环*/for(;;){if(flag1){/*处理事情1*/DoSomething1();}if(flag2){/*处理事情2*/DoSomethingg2();}if(flag3){/*处理事情3*/DoSomethingg3();}}}voidISR1(void){/*置位标志位*/flag1=1;/*如果事件处理时间很短,则在中断里面处理如果事件处理时间比较长,在回到后台处理*/DoSomething1();}voidISR2(void){/*置位标志位*/flag2=2;/*如果事件处理时间很短,则在中断里面处理如果事件处理时间比较长,在回到后台处理*/DoSomething2();}voidISR3(void){/*置位标志位*/flag3=1;/*如果事件处理时间很短,则在中断里面处理如果事件处理时间比较长,在回到后台处理*/DoSomething3();}在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的中小型项目中,前后台系统运用的好,堪称有操作系统的效果。多线程系统相比前后台系统,多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性又被提高了。多线程系统大概的伪代码具体见代码清单所示:intflag1=0;intflag2=0;intflag3=0;intmain(void){/*硬件相关初始化*/HardWareInit();/*OS初始化*/RTOSInit();/*OS启动,开始多线程调度,不再返回*/RTOSStart();}voidISR1(void){/*置位标志位*/flag1=1;}voidISR2(void){/*置位标志位*/flag2=2;}voidISR3(void){/*置位标志位*/flag3=1;}voidDoSomething1(void){/*无限循环,不能返回*/for(;;){/*线程实体*/if(flag1){}}}voidDoSomething2(void){/*无限循环,不能返回*/for(;;){/*线程实体*/if(flag2){}}}voidDoSomething3(void){/*无限循环,不能返回*/for(;;){/*线程实体*/if(flag3){}}}相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论