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