嵌入式操作系统三问:what?when?how?

大家好,很高兴和各位一起分享我的文章,喜欢和支持我的工程师,一定记得给我点赞、收藏、分享。

加微信[xyzn3333]与作者沟通交流,免费获取更多单片机与嵌入式的海量电子资料。

在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用 CPU 的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。本文我们对嵌入式实时操作系统进行经典三问:what?when?how?因此,以下是嵌入式设计需要RTOS解决方案的时间和原因。但在此之前,RTOS到底是什么,尤其是与裸机解决方案相比?

一:什么是嵌入式实时操作系统(RTOS)?

RTOS是一种操作系统,旨在管理嵌入式系统的硬件资源;它创建了多个软件执行线程和一个调度程序来管理这些线程。另一种说法是一个调度内核,它创建了一个多任务和确定性的运行时环境。

RTOS与无操作系统的“前后台”设计的最本质区别是任务调度器的设计,调度器可以为正在运行的任务分配精确且可重复的时间段的能力,

二:什么时候需要用RTOS?

当有更多中断源、更多功能和更多通信接口时,通常使用RTOS。简而言之,应用程序的复杂性在很大程度上决定了为MCU定制的RTO的使用。

刚开始学单片机,基本都是从裸机开始,经典的“项目”就是流水灯,也是你学习单片机的开始。但是随着学习的不断深入,裸机所暴露的问题就越来越多,这里我给大家总结下吧:1、并发性:程序并发工作效率低在写裸机软件时,不可避免的在主程序中会有一个超级大的 while(1) 循环,这里面几乎包含整个项目的所有业务逻辑。因为每个业务逻辑里面基本都会有 delay 这样的循环等待函数,这样导致了所有的业务逻辑几乎都是串行起来工作的。这个时候 CPU 就会有很多时间都浪费在了延时函数里,一直在空转,导致软件的并发效率非常差。2、模块化:高内聚,低耦合的原则从软件工程的角度,我们在做软件开发时,都会强调高内聚、低耦合的原则。而裸机的模块化开发难度非常大,模块间的耦合较重,这也导致了无法在大型项目使用裸机来开发。还是刚才 main 函数中大 while(1) 的例子,可以想象到那么多功能都紧紧的挤在一个函数里,不可拆分,模块化开发的困难重重。举一个非常贴切的例子,在一些使用看门狗的项目中,如果使用 delay 延时函数,那得注意点,万一延时过长,主函数来不及喂狗,看门狗就被触发了。最后会产生这样一种感觉,一个简简单单的 delay 还得考虑喂狗功能,裸机开发时操的心太多了,自然无法应用在大型项目中。3、生态:很多高级软件组件,必须依赖于操作系统来实现比如说,前些年一个基于 FreeModbus 的 Modbus 主机协议栈,因为要考虑各个平台适配问题,原本计划支持各种各样的操作系统,甚至是裸机平台。在各个操作系统上的适配都非常容易,但再去尝试着适配裸机时,发现难度重重,有一些函数在裸机上实现起来非常复杂,而且针对于不同的裸机环境,几乎没有通用性可言,太耗费精力了。所以我最终就放弃了裸机适配,一直到现在,在裸机上都没用这个 Modbus 主机协议栈。还有一些软件无法运行在裸机上,比如:乐鑫,Realtek、 ti 和 联发科 提供的 WIFi SOC SDK ,一些蓝牙 SOC 的 SDK 也都是只支持操作系统。所以,如果你不了解、不会使用操作系统,这些芯片也就玩不转了。4、实时性:功能复杂的情况下,实时性无法保证软件的实时性在一些领域会有一定的要求,软件的每个步骤必须在指定的时间被触发。工控领域就是最常见到的场景,如果实时性无法保证,机械设备可能就无法按照指定时序要求去动作,以至于发生机械事故,甚至会威胁到人的生命。回过来接着看裸机软件,如果软件变得庞大以后,可以想象到,主程序中那么大的一个 while(1) 循环,代码耦合严重,到处都是 delay 延时,要保证实时性几乎是不可能的。5、可重用性:软件可重用性差,总是重复造轮子可重用性与模块化程度有直接的关系。相信大家每个人在工作中都不想做很多重复性的工作,同样在写代码时,也想着尽可能少写一些功能相似的代码。但在这个嵌入式碎片化极其严重的时代,各式各样的芯片,想要让同样的代码,在裸机环境下同时适配不同的硬件,难度非常大。这样也就导致了裸机的代码会过多的依赖于底层硬件,重复造轮子的过程也就不可避免。

三:选择RTOS需要考虑的因素

现在开源或不开源的RTOS非常多,当我们选择具体使用哪个RTOS时主要需要考虑哪些因素呢?响应性:RTOS调度算法、中断延迟和上下文切换时间将显著定义系统的响应性和确定性。最重要的考虑是需要什么类型的响应——是否需要硬实时响应?这意味着有精确定义的最后期限,如果不满足,将导致系统失败。或者,非确定性的软实时响应是否合适?在这种情况下,无法保证每项任务何时完成。可用系统资源:微内核使用最少的系统资源,并提供有限但必不可少的任务调度功能。微内核通常提供硬实时响应,广泛用于RAM/ROM容量有限的嵌入式微处理器,但也适用于较大的嵌入式处理器系统。或者,可以使用Linux或WinCE等功能齐全的操作系统。它们提供了功能丰富的操作系统环境,通常随驱动程序、GUI和中间件组件一起提供。与微内核相比,功能齐全的操作系统通常响应速度较慢,需要更多的内存和处理能力,主要用于系统资源丰富的强大嵌入式处理器上。开源或专业许可有广泛使用的、免费的开源RTOS可用,在GPL或修改的GPL许可下分发。然而,这些许可证可能包含保留拷贝的限制,提供的保护很少。专业授权的RTOS产品取消了版权限制,提供完整的知识产权侵权赔偿和担保。此外,只有一家公司提供支持,并对产品质量负责。质量:RTOS供应商在其组织内对质量的重视程度如何?质量不仅仅是编码标准。是否有正确的程序来保证未来产品和支持的质量?管理良好、重视质量的公司往往通过ISO 9001认证。安全认证:预认证和可认证RTO可用于需要按照国际设计标准(如DO-178C和IEC 61508)认证的应用。这些RTO提供了关键的安全特性,以及认证机构要求的设计证据,以确认用于开发RTO的过程符合相关设计标准。许可证:它不仅是您需要考虑的RTOS功能和特性,而且是对您的项目预算和公司的“投资回报”最有效的许可模式。RTOS供应商:RTOS背后的公司与选择正确的RTOS本身一样重要。理想情况下,您希望与供应商建立关系,不仅支持您当前的产品,而且支持您未来的产品。要做到这一点,你需要选择一个具有良好声誉的积极主动的供应商,与领先的硅制造商合作,确保他们能够支持最新的处理器和工具。信任、产品质量和支持质量是一切。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 3
关注 49
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧