在上一篇文章“如何选择嵌入式系统操作系统:操作系统特性”中,我们讨论了嵌入式开发团队在选择操作系统时权衡的系统特性。我们看到产品的生命周期成本、物理特性、实时性能、库集成和安全性等特性发挥了作用。今天的文章将详细探讨何时何地使用裸机、RTOS和Linux。请记住,这些是通用指南,不同行业甚至不同产品都会有所不同。
何时使用裸机(无操作系统)
当你看到关于连接、物联网、机器学习和其他前沿话题的营销标题时,你可能会认为每个嵌入式系统都需要操作系统。不幸的是,这种印象与事实相去甚远!虽然许多尖端技术可能受益于操作系统,但对于相当多的应用程序来说,没有RTOS或Linux也能应付过去。
在几种情况下,不使用操作系统是很有意义的。首先,如果你使用8位或16位微控制器,你几乎总是希望使用裸机或使用轻量级协作调度程序。许多操作系统开发人员不把他们的软件移植到更小的架构上,因为这些系统已经受到处理器和资源的限制。添加操作系统通常会消耗过多的时钟周期,使系统效率低下。
其次,在嵌入式开发中,裸机解决方案在微控制器引脚数较少且可用的flash和SRAM有限的应用中很有意义。在资源受限的环境中工作时,每个字节和每个时钟周期都会影响产品是否可用。如果微控制器资源有限,最有效的解决方案可能是没有操作系统。
最后,如果你正在开发一个没有任何连接或高性能处理需求的“简单”控制应用程序,裸机可能对你的应用程序有意义。如今,在嵌入式系统中使用操作系统的一个重要驱动因素是对支持基础设施代码的需求。例如,连接到互联网的传感器必须连接到云,管理安全分区,执行安全更新,运行DSP算法等。操作系统可以帮助管理所有这些活动的时间和资源,但如果你没有这些东西,你可能不需要操作系统。
何时使用RTOS
当微控制器的板载资源达到40 MHz的最低时钟速度、至少64千字节的闪存和8千字节的RAM时,使用操作系统的大门就开启了。否则,你将花费更多的时间来满足RTOS的需求,而不是应用程序的需求。例如,当你使用RTOS时,每个任务都有自己的堆栈。堆栈至少需要512–1024字节的SRAM。如果你的设计需要六个任务,你会很快耗尽内存。你可能需要更多的闪存和RAM来构建正确的系统。
当嵌入式开发人员决定是使用RTOS还是裸机时,可以问自己几个问题:
添加RTOS会简化软件架构吗?
添加RTOS会提高软件的可维护性吗?
应用程序的实时性能会提高吗?
RTOS是一种应该为应用程序和整个软件开发生命周期提供价值的工具。如果RTOS是一个障碍,那么它不应该只是因为我想使用它而被使用。
在一些特定的应用中,使用RTOS很有意义。例如,如果我正在开发一个物联网产品,我几乎总是会选择RTOS。这是因为RTOS提供了工具和机制来轻松管理低级资源,并将应用程序分解成半独立的程序。当应用程序很复杂时,将应用程序分解成任务是很有意义的。例如,物联网产品往往需要多项任务来管理连接,更不用说终端应用了。另一个例子是具有显示器的设备,尽管有时这些应用最适合多核处理器。
何时使用Linux
近年来,在嵌入式系统中使用Linux已经成为一种流行的选择。Linux受欢迎的部分原因是它提供了一个全功能的操作系统,并附带了所有的功能。Linux附带了大量的库和特性。嵌入式开发人员可以利用多任务处理甚至内核的实时补丁。此外,运行Linux的硬件成本在过去五年中大幅下降,这使它成为特定应用程序的一个令人兴奋的解决方案。
在看一个项目是否可以使用嵌入式Linux的时候,可以考虑几点。首先,产品必须能够支持硬件的财务成本;第二点是产品的容量,如果你有一个小批量的产品,用户可能已经支付了更多的钱。当你考虑非经常性工程成本和产品成本之间的权衡时,你可能会发现使用Linux可以显著减少NRE和上市时间。如果客户对价格不敏感,Linux可能更有商业意义。
最后,我们不能忘记Linux为我们提供了强大的抽象、服务和库,可以简化工程。如果我们的产品非常复杂,我们可以利用Linux来简化我们与硬件的交互。我们可以使用更现代的编程语言,比如Python。如果需要,我们可以定制内核。Linux非常适合许多嵌入式应用程序。如果你需要灵活性和利用现有库的能力,Linux可能是你的应用程序的绝佳选择。
结论
选择用于嵌入式产品的操作系统可能会决定项目的成败。过于轻量级会导致开发团队花费更多的精力和时间来使事情正常工作;另一方面,太重会导致更高的材料成本。正如我们所看到的,为你的应用程序选择正确的操作系统归结为权衡什么对你的嵌入式开发团队和你的用户最重要。