如何支持嵌入式系统的跨平台开发(主要是32位MCU板级)-跨供应商和跨供应商的板

问题描述 投票:0回答:1

我正在尝试找到一个现有的开源平台,该平台可以抽象硬件和主板的具体信息,并允许直接进行嵌入式 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,但它不太符合我的要求。

embedded driver microcontroller platform hal
1个回答
0
投票

如果您的所有目标都是 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。

从根本上来说,答案是更加抽象,无论您是定义自己的抽象并跨平台实现它,还是使用现有的抽象。后者的优势在于它可以让第三方代码更容易移植,而定义您自己的代码可能会实现更广泛的平台支持。

© www.soinside.com 2019 - 2024. All rights reserved.