互操作性
包装类型提供析构方法 (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。
无论 crate 的实际名称如何,PAC 都应以名称 pac
重新导出,因为 HAL 的名称应已明确指明正在访问哪个 PAC。
类型实现 embedded-hal
特性 (C-HAL-TRAITS)
HAL 提供的类型应实现 embedded-hal
crate 提供的所有适用特性。
同一类型可以实现多个特性。