Zurück zur Startseite

STM32-Build mit IAR über GNU Make: Automatisierung für CI/CD

Der Artikel beschreibt den Prozess zum Einrichten von GNU Make für den automatischen Build von STM32-Firmware unter Verwendung des IAR compiler. Er behandelt wichtige IAR-Utility-Programme, Makefile-Struktur, Konfiguration von Kompilier- und Linkoptionen sowie die Vorteile der Integration mit CI/CD-Systemen für die industrielle Entwicklung.

STM32-Build mit IAR und Make für CI/CD automatisieren
Advertisement 728x90

Automatisierung von STM32-Firmware-Builds mit IAR und GNU Make für CI/CD

Die Integration des IAR-Compilers mit GNU Make ermöglicht industrielle Automatisierung für die Entwicklung eingebetteter Systeme, ohne Abhängigkeit von der IDE und mit optimierten CI/CD-Pipelines. Diese Methode erlaubt den direkten Build von STM32-Mikrocontroller-Firmware über die Kommandozeile und gewährleistet Reproduzierbarkeit, Skalierbarkeit sowie nahtlose Einbindung in Continuous-Integration-Systeme.

Aufschlüsselung der IAR-Toolchain und Kommandozeilen-Tools

IAR Embedded Workbench bietet umfassende Kommandozeilen-Tools für jeden Schritt der Kompilierung und Verknüpfung. Wichtige Komponenten sind:

  • iasmarm.exe — ARM-Assembler.
  • iccarm.exe — C/C++-Compiler für ARM.
  • ilinkarm.exe — Linker.
  • ielftool.exe — Tool zur Erzeugung von Binärdateien (HEX, BIN).

Diese Tools werden im Hintergrund von der IDE bei grafischen Builds aufgerufen, können aber direkt in Skripten genutzt werden. Durch Analyse des Build-Logs der IAR-IDE lassen sich die exakten Kommandozeilen-Flags ermitteln. Typische Optionen für iccarm.exe umfassen --cpu=Cortex-M4, --fpu=VFPv4_sp, --debug sowie Flags zur Deaktivierung von Optimierungen wie --no_inline oder --no_cse.

Google AdInline article slot

Erstellung eines Makefiles für IAR

Ziel ist ein Makefile, das die IAR-Tools mit den korrekten Parametern aufruft. Das Skript sollte die Tools flexibel über die Umgebungsvariable IAR_PATH oder den System-PATH finden. Hier ein Beispiel für Tool-Variablen:

ifdef IAR_PATH
    CC = $(IAR_PATH)/iccarm.exe
    AS = $(IAR_PATH)/iasmarm.exe
    LD = $(IAR_PATH)/ilinkarm.exe
    ELF_TOOL = $(IAR_PATH)/ielftool.exe
else
    CC = iccarm.exe
    AS = iasmarm.exe
    LD = ilinkarm.exe
    ELF_TOOL = ielftool.exe
endif

Wichtige Makefile-Abschnitte:

  • Kompilierflags (CFLAGS): IAR-spezifische Optionen wie Zielkern-Auswahl, FPU-Einstellungen und Debug-Infos.
  • Assemblerflags (ASFLAGS): Parameter für Assemblerdateien.
  • Linkerflags (LDFLAGS): Linker-Optionen inklusive Konfigurationsdatei (.icf) und Einstiegspunkt.
  • Build-Regeln: Targets für die Kompilierung von Quellcode (.c, .s) zu Objektdateien (.o) und Verknüpfung zu Executables (.out).

Compiler-Konfiguration und wichtige Optionen

Für zuverlässige Builds müssen die IAR-Compiler-Optionen präzise gesetzt werden. Häufige Flags für ein typisches STM32F407 (Cortex-M4)-Projekt:

Google AdInline article slot
  • --cpu=Cortex-M4: Legt den Ziel-CPU-Kern fest.
  • --fpu=VFPv4_sp: Aktiviert die Gleitkomma-Einheit.
  • --endian=little: Setzt die Byte-Reihenfolge.
  • -e: Ermöglicht IAR-C-Language-Erweiterungen.
  • --debug: Fügt Debug-Informationen hinzu.
  • Optimierungssteuerungen wie --no_inline zur Deaktivierung von Inline-Funktionen.

Diese werden in der COMPILE_IAR_OPT-Variable im Makefile gebündelt. Spezifische Compiler-Warnungen können mit --diag_suppress unterdrückt werden.

Linkprozess und Erzeugung finaler Artefakte

Der IAR-Linker (ilinkarm.exe) verknüpft Objektdateien mithilfe eines Linkerskripts (.icf), das Abschnitte auf Mikrocontroller-Speicher abbildet. Wichtige Linker-Optionen:

  • --config $(LDSCRIPT): Verweist auf die Linker-Konfigurationsdatei.
  • --entry __iar_program_start: Definiert den Programm-Einstiegspunkt.
  • --semihosting: Aktiviert Semihosting fürs Debuggen.
  • --map $(BUILD_DIR)/$(TARGET).map: Erzeugt eine Speicherkarte.

Nach Erstellung der .out-Datei wandelt ielftool.exe sie in flashbare Formate um:

Google AdInline article slot
  • --ihex für HEX-Dateien.
  • --bin für Binärbilder.

CI/CD-Integration und zentrale Vorteile

GNU Make mit IAR bietet wegweisende Vorteile für professionelle Embedded-Entwicklung:

  • Automatisierung: Automatische Builds auf CI/CD-Servern (z. B. Jenkins, GitLab CI) ohne manuelle Schritte.
  • Reproduzierbarkeit: Makefiles sorgen für konsistente Ergebnisse über Maschinen hinweg, im Gegensatz zu IDE-Einstellungen.
  • Skalierbarkeit: Neue Build-Konfigs (z. B. für verschiedene Geräte) durch wenige Zeilenänderungen.
  • IDE-Unabhängigkeit: Beliebige Editoren oder IDEs nutzen – kein Lock-in bei IAR Embedded Workbench.
  • Compiler-Vergleich: Leichter Wechsel zwischen Compilern (z. B. IAR und GCC) für Überprüfung und Fehlersuche.

Schritt-für-Schritt-Anleitung

  • Installieren Sie IAR Embedded Workbench und stellen Sie sicher, dass Kommandozeilen-Tools im PATH sind oder setzen Sie IAR_PATH.
  • Analysieren Sie Ihr IAR-Projekt (z. B. aus STM32CubeMX), um Compiler-Flags aus dem IDE-Build-Log zu extrahieren.
  • Erstellen Sie ein Basis-Makefile mit Tool-Variablen, Kompilier-/Linkflags und Build-Regeln.
  • Passen Sie das Linkerskript (.icf) an Ihre Zielplattform an.
  • Testen Sie den Build über die Kommandozeile und prüfen Sie HEX/BIN-Ausgaben.
  • Integrieren Sie in CI/CD, indem Sie einen make-Aufruf in Ihre Pipeline einfügen.

Wichtige Erkenntnisse

  • Build-Automatisierung: GNU Make automatisiert IAR-Firmware-Kompilierung vollständig, ohne manuelle IDE-Arbeit.
  • Konfigurationsflexibilität: Mehrere Build-Varianten mühelos via Makefile verwalten – essenziell für Produktlinien.
  • CI/CD-Integration: Nahtlos in Continuous Integration/Delivery einbinden und Entwicklungszyklen beschleunigen.
  • Tool-Unabhängigkeit: Entwickler von spezifischen IDEs befreien und Workflow-Flexibilität steigern.
  • Code-Qualitätsboost: Multi-Compiler-Builds decken versteckte Bugs auf und verbessern Portabilität.

— Editorial Team

Advertisement 728x90

Weiterlesen