互用性

封装类型提供一个析构方法 (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
    }
}
}

HALs重新导出它们的寄存器访问crate(C-REEXPORT-PAC)

可以在svd2rust生成的PACs之上,或在其它纯寄存器访问的crates之上编写HALs。HALs需要在crate root中重新导出它们所基于的寄存器访问crate

一个PAC应该被重新导出在pac名下,无论这个crate实际的名字是什么,因为HAL的名字应该已经明确了正被访问的是什么PAC 。

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

HAL提供的类型应该实现所有的由embedded-hal crate提供的能用的traits。

同个类型可能实现多个traits。