#embedded-hal #compatibility #compat #embedded #version

无 std embedded-hal-compat

不同嵌入式-hal 版本之间互操作性兼容层

19 个版本 (10 个重大更新)

0.13.0 2024年5月5日
0.12.0 2023年11月16日
0.11.1 2023年7月14日
0.7.0 2022年8月29日
0.1.3 2021年3月6日

#139硬件支持

MIT 许可证

34KB
572

嵌入式 HAL 兼容层

一个用于在不同嵌入式-hal 版本之间平滑过渡的兼容层(特别是 0.2.x1.0.0-alpha.X 系列)。

这解决了 HAL 实现(即您的处理器的实现)和您打算使用的驱动程序不匹配的问题。

该 crate 旨在跟踪 1.0.0-alpha 版本,并在发布时更新到 1.0.0,在 1.0.0-alpha.x 发布之间不提供适配(尽管如果认为这样做值得,我们 可以 做到这一点)

支持的版本

由于 1.0.0-alpha 的变化,每个 embedded-hal-compat 版本支持一个(左右)对 e-h 发布,请使用

  • embedded-hal-compat = "0.13.0" 对于 =1.0.0^0.2.7
  • 嵌入式-hal-兼容= "0.12.0" 对应于 =1.0.0-rc.1^0.2.7
  • 嵌入式-hal-兼容= "0.11.0" 对应于 =1.0.0-alpha.11^0.2.7
  • 嵌入式-hal-兼容= "0.10.0" 对应于 =1.0.0-alpha.10^0.2.7
  • 嵌入式-hal-兼容= "0.7.0" 对应于 =1.0.0-alpha.8^0.2.4
  • 嵌入式-hal-兼容= "0.6.0" 对应于 =1.0.0-alpha.7^0.2.4
  • 嵌入式-hal-兼容= "0.5.0" 对应于 =1.0.0-alpha.6^0.2.4
  • 嵌入式-hal-兼容= "0.4.0" 对应于 =1.0.0-alpha.5^0.2.4
  • 嵌入式-hal-兼容= "0.3.0" 用于 =1.0.0-alpha.4^0.2.4

状态

GitHub tag Build Status Crates.io Docs.rs Minimum Supported Rust Version

并非所有包装器都已完全实现,如果您发现缺少某些功能,请随时提交一个PR!

如何使用此工具

  • 嵌入式-hal-兼容 添加到您的依赖项中
  • 使用 use embedded_hal_compat::{ForwardCompat, ReverseCompat}; 导入
  • 在任意的 嵌入式-hal 类型不匹配上虚拟添加 .forward().reverse()
  • 有关更多信息,请参阅 docs.rs

我如何知道我需要这个?

类型错误。很多类型错误。

(例如,使用 cargo tree -i embedded-hal 返回两个版本)

这被诅咒了吗?!

至少有一点,因为特质的名称相同,您可能会遇到一些诅咒的错误,我们不得不在错误和错误类型周围的一些差异上铺路...

什么类型的错误?

因为您可能具有具有相同名称的符号,您最终会得到像这样的错误

error[E0599]: no method named `delay_ms` found for mutable reference `&mut Compat<atsamd_hal::delay::Delay>` in the current scope
   --> src/main.rs:351:27
    |
351 |         tlv.inner_delay().delay_ms(10u32);
    |                           ^^^^^^^^ method not found in `&mut Compat<atsamd_hal::delay::Delay>`

warning: unused import: `embedded_hal::blocking::delay::DelayMs`
  --> src/main.rs:22:5
   |
22 | use embedded_hal::blocking::delay::DelayMs;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

建议您缺少一个显然存在的导入,因为您有 0.2.x 导入而不是 1.0.0-alpha.x 导入,并且方法在更新后的 HAL 中被调用为 try_delay_ms(一个相当常见的重命名)。

您可以通过导入正确的特质来修复此问题,例如: use embedded_hal_compat::eh1_0::blocking::delay::{DelayMs as _};(这必须使用 as 重命名,您不能使用预定义,因为名称重叠),并通过交换方法以使用正确的 try_ 名称。

依赖项

~240KB