Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Интероперабельность

Типы-обертки предоставляют метод деструктора (C-FREE)

Любой тип-обертка, не являющийся Copy, предоставляемый HAL, должен иметь метод free, который потребляет обертку и возвращает исходное периферийное устройство (и, возможно, другие объекты), из которого она была создана.

Метод должен при необходимости выключать и сбрасывать периферийное устройство. Вызов new с исходным периферийным устройством, возвращенным из free, не должен завершаться с ошибкой из-за неожиданного состояния периферийного устройства.

Если тип HAL требует создания других объектов, не являющихся Copy (например, пинов ввода-вывода), такие объекты также должны быть освобождены и возвращены методом 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 переэкспортирует свой крейт доступа к регистрам (C-REEXPORT-PAC)

HAL могут быть написаны на основе PAC, сгенерированных svd2rust, или на основе других крейтов, предоставляющих прямой доступ к регистрам. HAL всегда должны переэкспортировать крейт доступа к регистрам, на котором они основаны, в корне своего крейта.

PAC должен быть переэкспортирован под именем pac, независимо от фактического имени крейта, поскольку имя HAL уже должно ясно указывать, какой PAC используется.

Типы реализуют трейты embedded-hal (C-HAL-TRAITS)

Типы, предоставляемые HAL, должны реализовывать все применимые трейты, предоставляемые крейтом embedded-hal.

Один и тот же тип может реализовывать несколько трейтов.