搞清裸机、RTOS、GPOS
想要搞清楚RTOS的“实时”,先要明白目前嵌入式领域三种开发形式——裸机开发(Bare Metal)、RTOS、GPOS(General-Purpose Operating System,通用操作系统),其主要特点如下:裸机:裸机系统不使用操作系统。相反,应用程序代码直接在硬件上运行,无需操作系统支持,代码可以直接与硬件交互并访问硬件。裸机开发在资源受限的场景效果非常好,比如8位、16位MCU,或者只有32KB闪存、2KB RAM时。当然,资源很丰富时候也可以采用裸机开发,就比如系统拥有高度的实时要求。目前,EEWorld论坛便拥有许多青睐于在裸机上开发的工程师。RTOS:顾名思义,旨在为实时应用程序提供服务,这些应用程序提供可预测的执行时间和时间敏感型应用程序,其的关键特征在于响应性和确定性。相比裸机,RTOS更方便。要使用RTOS,系统应至少拥有 64 KB闪存、4 KB RAM和80 MHz或更高的处理器时钟。RTOS通常用于比裸机更复杂时序要求的系统,通常需处理TCP/IP、MQTT、USB、Wi-Fi 等通信堆栈时管理实时需求。虽然裸机也能开发这种系统,但RTOS可以简化设计,加快上市时间,并使软件维护更容易。RTOS的另外关键点在于软件开发添加的功能,如务管理、任务同步、调度和任务间通信。RTOS允许考虑相互抢占的任务,从而允许更复杂的应用程序设计。GPOS:主要包括Linux、Windows等,旨在运行各种软件应用程序。这些操作系统专为用户交互而设计,提供某种界面,无论是命令行界面 (CLI) 还是图形用户界面 (GUI),旨在运行多个应用程序(通常具有多线程),并提供其他优势,例如资源/文件管理和设备驱动程序。用户交互通常是 GPOS 设计的主要关注点,因此一些延迟是可以接受的。同时,硬件也通常是32位以上处理器,主频达到200MHz以上,闪存达到数兆。因为Linux本身比较复杂,所以也诞生了介于RTOS和Linux之间的实时Linux(如Ubuntu的实时Linux)。实时Linux的核心概念是“抢占”,也就是中断当前执行线程,立即处理优先级较高的事件。RTOS和实时Linux之间的选择取决于系统特定延迟要求,以及对开销和资源效率的需求。虽然实时Linux为许多场景提供了强大的解决方案,但在某些关键的嵌入式系统中,专用 RTOS可能仍然更可取。如果项目需要在实时需求和运行各种应用程序的灵活性之间取得平衡,那么实时Linux将提供更通用的解决方案。
RTOS不能做什么
从裸机到RTOS,实际上工程师会存在许多困惑,EEWorld论坛中,工程师jorya_txj就曾用自己过去的经历,诉说自己对于RTOS的理解:他表示,目前接触了几位从裸机转向RTOS的人士,接触了一些项目,有一些感想,对于不了解RTOS的人,可能感觉这个东西很神秘,能解决任何裸奔解决不了的事情,可事情往往不是这样的。裸奔只做一件事情是最有效率的,如果干一件事情裸奔都很吃力,rtos解决不了硬件负债的事情,相反使用rtos会更差。举例说明,假设系统有一个20us频率的中断在cortex-m3 上面,中断内最大耗时10us。那中断内留给rtos的只有10us了,这10us内还需要调用rtos的队列发送api。虽然有的系统能响应20us中断,但是保证不了10us内能完成api的调用以及出中断处理。即使能保证,外面任务的执行效率将会很差很差。绝大部分的RTOS做不了1us以内的中断响应。也就是说中断发生了之后,需要1us就能处理用户的中断函数。上面两个例子只能从硬件设计上去着手,从根本上去解决这个问题。比如第一个问题可以采用专用的芯片或者控制器去降低中断的频率。第二个问题可以采用FPGA去完成精确地定时等等。RTOS更像一个军队管理决策者,而不是一个冲锋在前面的勇士。一个系统越趋向复杂RTOS的优势越大,一个系统越趋向简单,ROTS越无用武之地。RTOS很多时候不是救命稻草,硬件设计的问题还是需要硬件设计去解决,不能侥幸带到软件这边去解决,即使软件侥幸能解决这一次,下一次可能又解决不了了,不具备通用性。
|