我正在尝试找到一个现有的开源平台,该平台可以抽象硬件和主板的具体信息,并允许直接进行嵌入式 MCU 上的应用程序开发。理想情况下,我能够交替使用 FreeRTOS 或等效的轻量级 RTOS; NXP、ST 或 Texas Instruments 等供应商,以及 IMX.RT 或 STM32H7 或 Arduino 等各种板。
ChibiOS、NuttX、Zypher、mbedOS 看起来很酷,但它们本身就是操作系统和生态系统,并且不提供换入和换出您喜欢的操作系统的方法。
PlatformIO 很好,但强制您使用它们的目录结构和自定义构建系统,并且不是 HAL API;它的平台提供了一个平台起点来构建来自不同供应商的应用程序。
是否存在跨供应商、跨平台、跨 RTOS 的开源嵌入式 MCU HAL?
本质上是一个提供 HAL API 并使用 CMAKE 构建系统的 PlatformIO,该系统允许您使用您想要的任何 RTOS。
我研究过 ChibiOS、NuttX、Zypher、mbedOS、PlatformIO,但它不太符合我的要求。
如果您的所有目标都是 ARM MCU,则 ARM 定义 CMSIS,其中包括在多个底层 RTOS 上实现的 RTOS API 定义。
跨架构的情况则不然,尽管我已经通过在 Windows FreeRTOS 模拟器代码之上使用 FreeRTOS CMSIS 层成功地将 CMSIS-RTOS 移植到 Windows。因此,从理论上讲,您可以将 CMSIS-RTOS 移植到支持 FreeRTOS 的任何平台。
CMSIS 的其他部分可能不太容易移植到非 ARM MCU,也不太有用,但是您可以采用类似的方法,首先定义您自己需要的设备的设备层 API,然后使用本机将其移植到其他平台HAL 已可用于该平台。
然而,早在定义 CMSIS-RTOS 之前,我就定义了自己的 API(用 C++ 编写),并将其移植到 VxWorks、embOS、RTX、Windows 和 Linux(均用于模拟/测试)甚至 CMSIS-RTOS(因此抽象中的抽象)。因此,定义您自己的也是可能的。
限制所有应用程序代码仅使用抽象层,避免使用底层 RTOS API,确保可移植性。一些功能和机制或多或少可以直接实现,其他功能和机制可能需要更复杂的综合。
避免使用特定 RTOS 特有的功能是一个好主意,简化复杂的接口也是如此。大多数 RTOS 产品都具有过于复杂且庞大的 API,如果您使用所有工具,则很难进行迁移。保持简单,使用基本的 RTOS 原语,例如:
另一种方法是使用 POSIX API。许多较大的 RTOS 支持 POSIX API。
从根本上来说,答案是更加抽象,无论您是定义自己的抽象并跨平台实现它,还是使用现有的抽象。后者的优势在于它可以让第三方代码更容易移植,而定义您自己的代码可能会实现更广泛的平台支持。