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.

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