互操作性
包装类型提供析构函数方法 (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 提供的所有适用特性。
同一类型可以实现多个特性。