gpt4 book ai didi

c++ - HAL 中的硬件特定库

转载 作者:行者123 更新时间:2023-11-28 01:28:42 25 4
gpt4 key购买 nike

我正在做一个 C++(使用 cmake)嵌入式 HAL 层,并尝试添加一个特定于某些 MCU 的库。现在这里的问题是从上层访问库函数。

我的解决方案是使用该特定板的 cmake 文件来定义一个宏,在该宏上,库(和函数)将被排除或包含在上层中。这需要跟踪宏 -> 库和函数对。

从可扩展性的角度来看,这并不是一个好方法。是否有一些更方便的方法(从可扩展性和遗留的角度来看)来实现特定于硬件的能力?

最佳答案

如果您有一个通用 HAL,其中包含一个仅在某些 MCU 上可用的库,那么唯一的解决方案是脏条件编译器开关:#ifndef SOMETHING #include "library.h"...。这些很快会使代码变得不可读,因此它们始终是最后的手段。

然而,所有这些都表明您有程序设计问题。你的程序应该像这样工作(调用顺序):

应用程序代码 -> HAL -> MCU 特定驱动程序

这 3 层中的每一层都不知道其他层中的任何内容。所以很自然地,HAL 中不应该有任何特定于 MCU 的东西。相反,它应该在驱动程序内部。即使在驱动程序中的代码在其他方面完全相同的极少数情况下(例如,当使用同一系列的不同 MCU 衍生产品时)也是如此。

因此在实践中,您最终会得到例如“spi_library.h”,它是 HAL,以及许多驱动程序,例如“MCUX_SPI.c”、“MCUY_SPI.c”,其中“MCUX”和“MCUY”是不同的 MCU 部件号。

在 C++ 中,这通常是通过将 HAL 实现为抽象基类来完成的,每个 MCU 实现都继承它。 HAL 提供必须由驱动程序实现的纯虚函数。 (不一定是 public 的。)

发布您的 HAL 时,您需要提供所有受支持的驱动程序。但是应用程序应该只链接相关的驱动程序。应用程序不需要知道该驱动程序的内容,但它确实需要知道哪个 MCU 是目标版本。

关于c++ - HAL 中的硬件特定库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com