互用性

封装类型提供一个析构方法 (C-FREE)

任何由HAL提供的非Copy封装类型应该提供一个free方法,这个方法消费封装类且返回最初生成它的外设(可能是其它对象)。

如果有必要方法应该关闭和重置外设。使用由free返回的原始外设调用new不应该由于设备的意外状态而失败,

如果HAL类型要求构造其它的非Copy对象(比如 I/O 管脚),任何这样的对象应该也由free返回和释放。在那个案例中free应该返回一个元组。

比如:

  1. #![allow(unused)]
  2. fn main() {
  3. pub struct TIMER0;
  4. pub struct Timer(TIMER0);
  5. impl Timer {
  6. pub fn new(periph: TIMER0) -> Self {
  7. Self(periph)
  8. }
  9. pub fn free(self) -> TIMER0 {
  10. self.0
  11. }
  12. }
  13. }

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

HALs能被编写在svd2rust生成的PACs之上,或在其它纯寄存器访问的crates之上。HALs应该总是能在它们的crate root中重新导出它们所基于的寄存器访问crate

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

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

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

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