互操作性

包装类型提供析构函数方法 (C-FREE)

HAL 提供的任何非 Copy 包装类型都应提供一个 free 方法,该方法会消耗包装器并返回创建它的原始外设(以及可能的其他对象)。

该方法应在必要时关闭并重置外设。使用 free 返回的原始外设调用 new 不会因外设的意外状态而失败。

如果 HAL 类型需要构造其他非 Copy 对象(例如 I/O 引脚),则 free 也应释放并返回任何此类对象。在这种情况下,free 应返回一个元组。

例如

#![allow(unused)]
fn main() {
pub struct TIMER0;
pub struct Timer(TIMER0);

impl Timer {
    pub fn new(periph: TIMER0) -> Self {
        Self(periph)
    }

    pub fn free(self) -> TIMER0 {
        self.0
    }
}
}

HAL 重新导出其寄存器访问 crate (C-REEXPORT-PAC)

HAL 可以基于 svd2rust 生成的 PAC 编写,也可以基于提供原始寄存器访问的其他 crate 编写。HAL 应始终在其 crate 根目录中重新导出它们所基于的寄存器访问 crate。

PAC 应在 pac 名称下重新导出,无论 crate 的实际名称是什么,因为 HAL 的名称应该已经清楚地表明正在访问哪个 PAC。

类型实现 embedded-hal 特性 (C-HAL-TRAITS)

HAL 提供的类型应实现 embedded-hal crate 提供的所有适用特性。

同一类型可以实现多个特性。