为何要学RTOS,了解下RTOS的特点

内容来自https://baijiahao.baidu.com/s?id=1600453769383866660&wfr=spider&for=pc

内容来自https://baike.baidu.com/item/嵌入式RTOS/21516881

目录

笔记

为何要学RTOS?

如何选择RTOS?

RT-Thread——国产RTOS系统


为何要学RTOS,我们应该如何选择一款好的RTOS?

 

我们为什么要学RTOS?学习RTOS能够在现实中解决哪些问题?

 

对于这两个学习嵌入式系统开发的问题,想必已经是被问得最多的了。那么,学习RTOS究竟有哪些好处,学成之后该如何去应用RTOS?

笔记

在嵌入式应用领域,很多场合对系统的实时性要求严格,因此操作系统的选择要基于实时系统。实时多任务操作系统(Real Time Operating System,简称RTOS)。

RTOS系统强调实时性、短时间内响应,满足物联网高速、实时、可确定性、可靠性等诸多优势,同时也是实时商用多任务os,追求系统资料的最大利用率,未来前途广阔;RTOS代码量少,是编写管理代码的最佳系统。相比通用linux系统,就包含调度、文件、网络、驱动等完整代码,而RTOS仅包含调度、同步、互斥、时钟等代码,并能根据应用需求实际增加,大大减少编写和管理工作量。

选择RTOS要考虑的要素:1.成本;2.可靠性;3.实时性;4.工具链;5.模块丰富;6.RTOS 内核 RAM、ROM 占用量;7.支持

为何要学RTOS?

 

在实际项目中,如果程序等待一个超时事件,在传统无RTOS情况下,要么在原地一直等待而不能执行其他任务,要么使用复杂的状态机机制。如果使用RTOS,则可以很方便的把当前任务阻塞在该事件下,然后去执行别的任务,这个显然更加方便、也能更高效利用CPU资源。

 

RTOS可应用于任务复杂的场合,随着物联网的发展,未来的嵌入式产品必然向着更为复杂、连接性更强以及需要更丰富的用户界面,因此,一个好的RTOS变得不可或缺;

 

RTOS系统强调实时性、短时间内响应,满足物联网高速、实时、可确定性、可靠性等诸多优势,同时也是实时商用多任务os,追求系统资料的最大利用率,未来前途广阔;

 

RTOS代码量少,是编写管理代码的最佳系统。相比通用linux系统,就包含调度、文件、网络、驱动等完整代码,而RTOS仅包含调度、同步、互斥、时钟等代码,并能根据应用需求实际增加,大大减少编写和管理工作量。

 

如何选择RTOS?

 

当您决定使用 RTOS,下面的问题就是选择什么 RTOS 了。市面上的RTOS实在是太多,各种各样的都有,我们选择一个RTOS的时候,可能要权衡以下因素:

 

1.成本

2.可靠性

3.实时性

4.工具链

5.模块丰富

6.RTOS 内核 RAM、ROM 占用量

7.支持

 

成本主要是 RTOS 的版费、学习成本。这个差别可大了,有些操作系统,如商业的VxWorks、QNX、Lynx、uC/OS,贵啊,但拍了银子,人家肯定会教您上手的。但很多操作系统,如 FreeRTOS、 RTEMS、ecos、RT-Thread,商业使用几乎是没有成本的,也没有任何的版权问题。撇开这些商业收费的 RTOS 不谈,就谈这些开源免费的 RTOS,成本主要是学习成本了。如RTEMS这种操作系统就不太好学,资料少,本身的复杂度也高;如 FreeRTOS,小巧,研究的人也多,本身代码也不复杂,学习曲线不陡峭,很容易爬上去。

 

可靠性是靠时间沉淀的。市场上不乏一些后起之秀,如rt-thread,相比 rtems 这种鼻祖类的 rtos,还稍显稚嫩。这并不意味这我们什么都选择 rtems, 那 rt-thread 怎么发展?对于小型的项目,可以试一试。大型项目,为了减少技术上的风险,还是谨慎为妙。

 

实时性,这个应该是 RTOS 的看家本领,我初学 rtos 的时候,好喜欢看牛人搞得 RTOS 对比表格。上下文切换时间啊,中断响应时延啊……总喜欢挑那些时间最小的系统……但后来我知道了,事实上不是几个对比表格就能说清楚问题的。下面会详细说到这些问题。

 

工具链,它往往决定我们开发的效率,和最终产品交付的质量。有一些 RTOS 没那么幸运,没有让你选择工具链的权利,就算有,也需要付出很大的代价。如 RTEMS 采用GNU的工具链,gnu 的工具链不好用,我就尝试过把 rtems 移到 iar ewarm 下。后来,搞到一半的时候,不得不放弃,付出的精力已经超出了我的承受范围。但 freeRTOS、uC/OS 这类小 RTOS,只要编译器支持编译可重入代码就可以,这条只有老掉牙的编译器不行。所以基本上是个C编译器都可以做Free RTOS、uC/OS的编译。

 

模块丰富,有没有TCP/IP协议栈、文件系统、CAN协议栈、图形界面等。当然这个都不是必须的,对于简单的产品,可能这些模块都用不到。对于复杂的系统,这些集成好的模块,会大大节省开发时间。自己也可以移植相关的模块,可能会有几个切实的问题不好解决:模块因为不符合 rtos 的设计思想,会对整体的实时性造成损害;也可能因为模块使用的库,和 rtos 使用的库相冲突……

 

内核 RAM、ROM 的占用量实际上要求 RTOS 高度可裁剪。不是所有内核裁剪到最后都能满足要求,RTOS 都有个最低的 RAM、ROM 要求,只剩一些最基本的服务。每加一个特性会增加一些资源,可以查阅相关资料得到这方面信息,确定系统资源可以保证顺畅的使用该 RTOS。

 

支持,如果是商业系统,那不用担心,既然付了银子,人家肯定保证实施过程的顺畅。如果是开源系统,开发团队没有像样的 rtos 专家可不行。虽然 rtos 系统都是相通的,了解另外一个 rtos 很快,但有时候也不尽然。RTEMS 这么复杂的 RTOS 搞懂了,去弄 freeRTOS、uC/OS、rt-Thread 小麻雀,自然没问题;要是弄 QNX、VxWorks、Lynx,还是要费点功夫。 RTOS 在开发过程中会遇到很多问题,比如栈的估算、任务优先级的设计、内存的设计、实时性的设计等,都是很不好弄的问题。最好团队内有相关 RTOS 的专家,要是学习的话无所谓,研发产品和系统的话,那就是大问题了。

RT-Thread——国产RTOS系统

大概是2014年9月,接过主管交接的项目,项目以STM32F103ZET6硬件平台,而运行的实时系统(RTOS)正是RT-Thread(RTT)。也是从此时开始接触到RTT,国人自己写的开源系统,从此对其也是“爱不释手”,在往后的工作中,一直在使用,特别是在后来换了份工作,在新东家里用RTT开发了几款产品,也给自己也带来了财富和才华。比较惭愧的是,在RTT伴随着自己职业生涯的几年里,除了给身边的同行、朋友推荐RTT,及在各大论坛(CSDN、21ic、opendv)推荐RTT外,并没有向RTT源码仓库提交过自己的代码,一直是“伸手党”。RTT是一个开源的RTOS,其能够快速壮大,离不开作者熊大和开源社区开发大牛的力量,所以总结下过往的使用经验,努力为RTT贡献一份力量。恰逢最近发生比较影响比较大的事件——中美贸易战及中兴被美禁售芯片。从中事件中也暴露出我国的短板——芯片和操作系统,而芯片和操作系统都是一个长时间积累的过程,特别是操作系统,需要一个完善的生态链,简单说就是需要广大的开发者参与进来,如手机的安卓系统。故,让更多同行知道RTT,并参与到开发中,发展自己国人的操作系统。 

1.官方介绍 
  RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoT OS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过11年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过两千万台,成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。 
  RT-Thread拥有良好的软件生态,支持市面上所有主流的编译工具如GCC、Keil、IAR等,工具链完善、友好,支持各类标准接口,如POSIX、CMSIS、C++应用环境、Javascript执行环境等,方便开发者移植各类应用程序。商用支持所有主流MCU架构,如ARM Cortex-M/R/A, MIPS, X86, Xtensa, C-Sky, RISC-V,几乎支持市场上所有主流的MCU和Wi-Fi芯片。 

2.个人使用体会 
1)支持的cpu众多,支持当前应用中的主流架构的CPU,并且都移植好相关bsp包,几乎是获取源码即可运行,免去新手复杂的环境构建步骤。 
2)占用资源小,官方介绍最小配置时,内核可以到3K ROM和1K RAM 的占用。正常使用一片STM32F103C8T6(20k RAM,64 k flash)都能跑起来。 
3)支持的任务(线程)数量无限制,256个优先级,支持时间片轮询。这对处理多个任务或者对于时间片要求比较严格的任务非常有优势。 
4)完善的外设,如spi、i2c、uart等总线驱动,及TCP/IP协议栈、文件系统、数据库(sqlite3)等资源的支持。试用期,常用的底层不需大量修改,增加特殊的驱动,然后将主要的精力花在应用开发上。 
5)Linux风格,熟悉Linux的可以很快上手。提供finsh shell,类似Linux的命令行模式,能够解析C代码,在命令终端执行代码,对于调试、打log、内存查看等非常有用。为了节省资源,代码发行时关闭finsh shell即可。 
6)本人已在使用RTT的项目有3款,以及内部使用的工具2款,有带GUI的也有只使用内核的,经过长时间的使用,目前为止没有发现因为是RTT的bug导致的问题。因此RTT经过十多年的沉淀还是非常稳定的。


3.相关资源 
[1] 官方地址:https://www.rt-thread.org/index.html 
[2] 源码仓库:https://github.com/RT-Thread/rt-thread 
[3] 编程指南:http://download.rt-thread.org/download/manual/rtthread_manual.zh.pdf

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(物联网)