分享

关于 RTOS 的选择 (上)

 袁先森lemon 2020-07-01
很多朋友和同事都问我,在实际中如何选择 RTOS。这个问题好难回答啊,非常复杂。实际中至少有三种情况:

1.有些地方根本不需要 RTOS,可能系统设计者是爱好 RTOS 的人,:-),硬上了RTOS;
2.有些地方需要 RTOS, 但因为各种原因,没有使用 RTOS;
3.最糟糕的情况是,选择的错误的 RTOS 进行开发,要了开发团队的命……

在选择之前可以问问以下几个问题:

1.系统对一些事件的响应延迟时间有要求吗?该时限在微秒级。
2.系统对一些事件的处理有时限要求? 该时限接近 CPU 全速处理该事件一次需要的时间,相差不过毫秒级别。
3.系统中这些事件的处理代码复杂吗(平均每个事件的处理代码不超过100行标准C代码,无函数调用)?这种事件超过5个以上?
4.系统有RAM、ROM的限制,使得大多数操作系统如 linux、uClinux、WinCE 无法正常工作吗?
5.系统有一定的规模,超过 2W 行标准C/C++代码吗?系统中有多个逻辑事务,逻辑事务之间有同步或数据交换吗?
6.产品或系统生命周期长,有后续升级、发展的要求吗?
7.团队对选择的 RTOS 了解吗?有 RTOS 实施方面的专家吗?

如果上面有超过 2 个问题回答是的朋友们注意了,您很可能需要 RTOS 进行您系统的开发。如果超过 4 个问题回答是的朋友,您必须使用 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 的专家,要是学习的话无所谓,研发产品和系统的话,那就是大问题了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多