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

Interoperabilität

Wrapper-Typen stellen eine Destruktor-Methode bereit (C-FREE)

Jeder vom HAL bereitgestellte Wrapper-Typ, der nicht Copy implementiert, sollte eine free-Methode anbieten; diese verbraucht den Wrapper und gibt das rohe Peripheriegerät (sowie gegebenenfalls weitere Objekte), aus dem er erstellt wurde, wieder frei.

Die Methode sollte das Peripheriegerät bei Bedarf deaktivieren und zurücksetzen. Ein Aufruf von new mit dem durch free zurückgegebenen rohen Peripheriegerät darf nicht aufgrund eines unerwarteten Zustands des Geräts fehlschlagen.

Falls für die Konstruktion des HAL-Typs weitere Objekte erforderlich sind, die nicht Copy implementieren (zum Beispiel I/O-Pins), sollten auch diese Objekte durch free freigegeben und zurückgegeben werden. In diesem Fall sollte free ein Tupel zurückgeben.

Zum Beispiel:

# pub struct TIMER0;
pub struct Timer(TIMER0);

impl Timer {
    pub fn new(periph: TIMER0) -> Self {
        Self(periph)
    }

    pub fn free(self) -> TIMER0 {
        self.0
    }
}

HALs exportieren ihr Registerzugriffs-Crate erneut (C-REEXPORT-PAC)

HALs können auf der Basis von mit svd2rust generierten PACs oder anderen Crates implementiert werden, die einen direkten Registerzugriff ermöglichen. HALs sollten das Crate für den Registerzugriff, auf dem sie aufbauen, stets an der Wurzel ihres eigenen Crates erneut exportieren (re-exportieren).

Ein PAC sollte unter dem Namen pac re-exportiert werden – unabhängig vom eigentlichen Namen des Crates –, da bereits der Name der HAL verdeutlichen sollte, auf welches PAC zugegriffen wird.

Typen implementieren die embedded-hal-Traits (C-HAL-TRAITS)

Vom HAL bereitgestellte Typen sollten alle anwendbaren Traits implementieren, die vom embedded-hal-Crate bereitgestellt werden.

Für denselben Typ können mehrere Traits implementiert werden.