Zurück zur Startseite

Proxy MCAL für MCU: Code-Portabilität

Proxy MCAL bietet eine einheitliche API für Mikrocontroller-Peripheriegeräte, implementiert durch Binding an vendor HAL. Gewährleistet Firmware-Portabilität beim Wechsel des MCU. Beispiele für STM32, NRF, AT32 mit Fokus auf Vollständigkeit und Testbarkeit.

Proxy MCAL: Firmware migrieren ohne Neuschreiben
Advertisement 728x90

Proxy MCAL: Universelle Abstraktionsschicht für Mikrocontroller

Proxy MCAL löst das Problem, die Anwendung an die HAL eines bestimmten Herstellers zu binden. Beim Migrieren der Firmware zu einem neuen Mikrocontroller erfordert die Standard-HAL eine vollständige Neuschreibung der Treiber für GPIO, SPI, UART und andere Peripheriegeräte. Proxy MCAL stellt eine einzige API bereit, die durch Bindungsfunktionen für jede MCU-Familie implementiert wird. Dadurch bleibt die Portabilität des Codes erhalten, ohne die Anwendungslogik umzuschreiben.

Entwickler stehen vor Migrationen aufgrund von Chip-Alterung, Lieferengpässen, Sanktionen oder neuen Anforderungen wie Bluetooth 5.3. Proxy MCAL gewährleistet Modularität konform mit ISO-26262: abstrakte Architektur, Konfigurierbarkeit, Testbarkeit.

Anforderungen an Proxy MCAL

Proxy MCAL muss strenge Kriterien für Middle-/Senior-Entwickler erfüllen:

Google AdInline article slot
  • Vollständigkeit: Getter/Setter für alle Peripheriegeräte (CLOCK, GPIO, I2C, SPI, UART, ADC, DMA). Unbenutzte Funktionen sind weak, sodass der Linker sie verwirft.
  • Akzeptanz: gemeinsame API, die im Team abgestimmt ist.
  • Einfachheit: 45–55 Zeilen Prototypen, intuitive Schnittstelle, Dokumentation über grep in den Modultests.
  • Skalierbarkeit: mehrere Instanzen von Komponenten.
  • Vielseitigkeit: Unterstützung für ASIC-Treiber, Protokolle, RTOS.
  • Portabilität: Kompilierbar auf dem PC mit leeren weak Stubs.
  • CLI-Zugriff: Funktionsüberprüfung über UART zur Laufzeit.
  • Testbarkeit: Modultests als Dokumentation.
  • Konfigurierbarkeit: separate Konfigs als Arrays von Strukturen.

Beispiele für Bindungsfunktionen

Einheitliche API gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) unterschiedlich implementiert:

Für STM32:

bool gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) {
    HAL_GPIO_WritePin(Port2PortPtr(pad.port), 1 << pad.pin, (GPIO_PinState)logic_level);
    return true;
}

Für NRF5340:

Google AdInline article slot
bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
    bool res = false;
    res = gpio_is_valid_pad(Pad);
    if(res) {
        nrf_gpio_pin_write((uint32_t)Pad.byte, (uint32_t)logic_level);
    } 
    return res;
}

Für Artery AT32 (ISR-sicher):

bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
    Pad_t pad = {0};
    (void)pad;
    pad.byte = pad_num;
    gpio_type* GPIOx = Port2PortPtr(Pad.port);
    if(GPIOx) {
        switch((uint8_t)logic_level) {
        case GPIO_LVL_HI: {
            GPIOx->scr = 1 << Pad.pin;
        } break;
        case GPIO_LVL_LOW: {
            GPIOx->clr = 1 << Pad.pin;
        } break;
        }
    }
    return true;
}

Prototypen sind festgelegt, Rümpfe an Hersteller-HAL oder Register angepasst.

Vorteile der Implementierung

  • Portabilität: Proxy-MCAL-Anwendung kompiliert für jeden MCU über Bindings.
  • Tests: einheitliche Modultests verifizieren jede HAL.
  • CLI-Schnittstelle: zentralisierte Peripherieverwaltung.
  • ASIC-Treiber: universell für SPI/I2C-Geräte auf allen Plattformen.

Nachteile und Abhilfen

Overhead – 10–20 Takte pro Aufruf. Lösung: Inline-Funktionen. Risiko von Spaghetti-Code minimiert durch API-Einfachheit und lockeres Coupling.

Google AdInline article slot

Wichtige Punkte

  • Proxy MCAL trennt die Anwendung von der Hersteller-HAL und vereinfacht die Migration zu neuen MCUs.
  • Einheitliche API mit Bindings gewährleistet Vollständigkeit und Portabilität.
  • Konform mit ISO-26262: Modularität, Testbarkeit, Konfigurierbarkeit.
  • Unterstützt CLI und Modultests für Laufzeitverifikation.
  • Skaliert auf 16+ MCU-Familien ohne Neuschreibung der Anwendung.

— Editorial Team

Advertisement 728x90

Weiterlesen