前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTOS | 那么什么是RTOS?三大操作系统?(第十四天)

RTOS | 那么什么是RTOS?三大操作系统?(第十四天)

原创
作者头像
Qt历险记
发布2024-10-19 11:01:24
4150
发布2024-10-19 11:01:24
举报
文章被收录于专栏:嵌入式软件

点击上方"蓝字"关注我们

01、实时操作系统

>>>(一)概述 RTOS(Real Time OS Operating System )即实时操作系统,根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级(类似前面章节的中断抢占优先级),RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。 实时多任务操作系统,以分时方式运行多个任务,任务之间的切换以优先级为根据。只有优先服务方式的RTOS才是真正的实时操作系统。 使用实时操作系统还需要额外的ROM(作用:固化的存储代码)/RAM(作用:代码运行的内存)开销,2~5%的CPU额外负荷,以及内核的费用。 使用实时操作系统的必要性: 嵌入式实时操作系统提高了系统的可靠性 提高了开发效率,缩短了开发周期。例如官方甚至提高网络协议栈、文件系统、图形界面(ucGUI、emWin、QT....)的支持。 嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。

02、RTOS做嵌入式开发的优势

2.1 软件工程角度分析

>>>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.可重用性:软件可重用性差,总是重复造轮子     可重用性与模块化程度有直接的关系。相信大家每个人在工作中都不想做很多重复性的工作,同样在写代码时,也想着尽可能少写一些功能相似的代码。但在这个嵌入式碎片化极其严重的时代,各式各样的芯片,想要让同样的代码,在裸机环境下同时适配不同的硬件,难度非常大。这样也就导致了裸机的代码会过多的依赖于底层硬件,重复造轮子的过程也就不可避免。

03、操作系统带来的优势

>>>线程方式的并发任务处理,解决模块化问题,同时保证实时性。

>>>1. 模块化     使用了操作系统以后,整个软件的工作被拆分成了由多个任务来构成(也会被称为线程),每个任务有自己独立的运行空间,即任务堆栈,这个时候每个任务你玩你的,我做我的,咱们大家互补干涉,模块化程度得到很好的提高。

>>>2. 并发性     从并发的角度来看,各个线程在使用 delay/事件等待 这类函数时,会自动的让出 CPU 给其他有需要的线程,不仅书写 delay 延时函数操的心少了,并发的好处就是能够在更细的粒度来尽可能的提高CPU的利用率。

>>>3. 实时性     再来看实时性,像 ucos/RT-Thread 这些 RTOS 本身就被设计为实时的操作系统,各个线程都有不同的优先级别,重要的线程可以设为高优先级,不重要的线程可以降低优先级,做好全局的统筹规划后,这样整个软件的实时性也能得到保证。

>>>4. 开发效率     由于操作系统提供了统一的抽象接口层,方便了可重用组件的积累,提高开发效率。     操作系统其实是一群软件大牛们智慧的结晶,他们站在应用软件、底层驱动的开发角度,对很多常见的软件功能进行了封装、抽象,比如:信号量、事件通知、邮箱、环形缓冲区、单向链表/双向链表等等,这些功能拿来即用,对于开发者方便极了     还有一些操作系统,比如:Linux 和我们国产的 RT-Thread ,他们这些系统对碎片化的硬件,统一封装了一套标准的硬件操作接口,一般称为设备驱动框架。这样我们的应用软件工程师,就可以专攻应用的工作,再也不用怕更换硬件,又需要重复造轮子了。

>>>5. 软件生态     生态的丰富带来了量变到质变的过程(自己玩->大家一起玩)。     使用操作系统所带来的软件可模块化、重用性的提升,也使得我们自己在做软件开发时,可以封装一套基于操作系统、适合嵌入式的可重用组件,这些组件不仅可以用在自己的项目中,还能开源出来分享给更多有需要的嵌入式开发者,把软件的价值最大化。

09、三大操作系统

>>>1.UCOS官网 网址:https://www.micrium.com/ 

2.RT-Thread 国产操作系统,YYDS 网址:https://www.rt-thread.org/

3.FreeRTOS 网址:https://www.freertos.org/

>>>市场占用率 就业选择好方向

10、推荐代码框架

>>>1.一个任务管理一个硬件 2.任务与任务或任务与中断涉及到数据传输使用消息队列 3.任务间共享资源访问使用互斥锁 4.任务的同步使用信号量 5.标志位的管理使用事件标志组 6.编写一个专门初始化硬件的任务,该任务可以包含创建任务的功能。

总结

>>>内容较多请耐心看完,对你受益无穷。更多内容还请点击下方。 持续更新中

本节内容获取 链接:https://pan.baidu.com/s/1vIoM71ycTirtLnXf4Bpjfw?pwd=a2v3 提取码:a2v3 --来自百度网盘超级会员V1的分享

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 点击上方"蓝字"关注我们
  • 01、实时操作系统
  • 02、RTOS做嵌入式开发的优势
    • 2.1 软件工程角度分析
    • 03、操作系统带来的优势
    • 09、三大操作系统
    • 10、推荐代码框架
    • 总结
    相关产品与服务
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档