在嵌入式系统中,追求兼容性和可移植性是一个永恒的挑战。虽然当今许多系统都采用了实时操作系统(RTOS),但每个系统都有其独特性和差异性,因此兼容性仍然是一个问题。如果不想让应用代码与实时操作系统紧密耦合,就只有几种选择。
首先,可以创建操作系统抽象层(OSAL)。虽然它既优雅又符合架构师的世界观,但大多数团队都无法接受这个想法。它增加了复杂性,而且要设计出非常适合自己需要的东西也很有挑战性。(即使存在像Arm 的 CMSIS-RTOS v2 这样的抽象层)。
一个更有趣、更容易接受的解决方案是采用可移植操作系统接口(POSIX)。POSIX 是一套标准化的应用程序接口和约定,长期以来一直是类 Unix 操作系统领域的主流。但 POSIX 是 RTOS 应用程序面向未来的关键吗?在本篇文章中,我们将探讨 POSIX 在 RTOS 开发中的作用、其优势、注意事项以及表明它可能确实是未来发展方向的趋势。
什么是 POSIX?
POSIX 是由 IEEE 定义的一套标准,旨在确保类似 Unix 的操作系统之间的兼容性和可移植性。POSIX 定义了线程管理、文件 I/O、套接字和定时器的接口,使开发人员更容易编写可在不同 Unix 系统中使用的软件。(敢情它是 1988 年创建的!)。
RTOS 兼容性挑战
RTOS 应用程序通常是针对其运行的特定操作系统定制的。这种定制可确保应用程序充分利用 RTOS 的特性和功能。不过,这也会使应用程序与 RTOS 紧密结合!对于从未计划更改 RTOS 的团队来说,这可能不是问题。RTOS 已成为其应用程序所围绕的架构的核心组件。
任何优秀的软件架构师都不会喜欢这种想法。一个好的架构和实现应该与操作系统无关,而不是将操作系统作为核心!如今,许多团队都在设计计划在未来十年或更长时间内使用的软件平台。如何确保所选的实时操作系统仍然存在或提供所需的支持?如果业务目标或需求发生变化,而另一种 RTOS 最能满足这些需求,该怎么办?
如果发生了上述情况,而您又将 RTOS 与应用程序紧密耦合,那么您就需要花费大量的时间和成本来更新和重新验证您的软件。您可能认为这只是一个更新调用的问题,只需要几天的时间。事实总是比你想象的要复杂得多。例如,看看FreeRTOS如何在队列中发送数据,ThreadX如何在队列中发送数据。一个是按字节,一个是按字!这不是什么大问题,但如果你忽略了这一区别呢?(给你个提示:无声的缓冲区溢出,导致应用程序中其他地方出现意外行为!)。
POSIX 在实时操作系统应用中的作用
POSIX 可以作为 RTOS 开发中的一个统一因素。通过采用与 POSIX 兼容的 API,RTOS 供应商可以为开发人员提供熟悉且一致的编程接口。这意味着,为符合 POSIX 标准的 RTOS 编写的应用程序可以更容易地移植到另一种 RTOS 上,而不需要进行大量的代码修改。
有利于 RTOS 应用程序的一些关键 POSIX 功能包括
- POSIX 线程(Pthreads):支持多线程和并行,对实时应用程序至关重要。
- POSIX 文件 I/O:在不同的 RTOS 平台上简化文件操作。
- POSIX 套接字:利用标准化套接字应用程序接口促进网络通信。
- POSIX 定时器:管理时间紧迫的任务和调度。
- POSIX 信号处理异步事件和信号
- POSIX 互斥和 Semaphores:线程安全操作的同步原语
在 RTOS 应用程序中使用 POSIX 的优缺点
在 RTOS 应用程序中采用 POSIX 有几个好处。首先,符合 POSIX 使得在不同 RTOS 平台上重复使用或调整代码变得更加容易,从而减少了开发时间和工作量。其次,在基于 POSIX 的环境中有经验的开发人员在开发 RTOS 应用程序时可以充分利用他们的技能。传统上,新开发人员需要接受大量培训。有了 POSIX,任何熟悉 Unix 模式的开发人员从第一天开始就能提高工作效率。最后,开发人员可以同时针对多个平台进行开发。例如,一个团队可以使用 RTOS 作为嵌入式目标,但在 Linux 下测试应用代码!
这些优势使我们倾向于使用 POSIX。不过,在做出这样的决定之前,有必要了解 POSIX 的局限性。例如,有人认为 POSIX 抽象引入的开销可能会影响资源受限环境中的实时性能。事实上,在资源高度紧张的系统中,增加的复杂性可能会使 POSIX 的使用立即成为泡影。即使采用了 POSIX,某些应用也可能有特定的要求,而 POSIX 本身无法完全满足这些要求。在这种情况下,RTOS 特定的应用程序接口(API)可能仍然是必要的,尽管团队可能会尽力减少这些应用程序接口的使用。
结论
在兼容性和可移植性至关重要的今天,POSIX 是应对实时操作系统应用程序开发挑战的一个很有前途的解决方案。虽然 POSIX 并非万能的解决方案,但它在代码可移植性和开发人员熟悉程度方面的优势必须得到重视。RTOS 应用程序的未来可能是 POSIX 驱动的,从而开创资源受限嵌入式系统跨平台开发的新时代。目前已有多个开源和商业 RTOS 解决方案提供 POSIX 接口。这一成熟的标准是否会在使用 RTOS 应用程序的嵌入式开发人员中焕发第二春,我们拭目以待。
本文暂时没有评论,来添加一个吧(●'◡'●)