Zpět na domů

Sestavení STM32 s IAR přes GNU Make: automatizace pro CI/CD

Článek popisuje proces nastavení GNU Make pro automatické sestavení firmware STM32 s použitím kompilátoru IAR. Jsou zde popsány klíčové nástroje IAR, struktura Makefile, konfigurace voleb kompilace a linkování, stejně jako výhody integrace s CI/CD systémy pro průmyslový vývoj.

Automatizujte sestavení STM32 s IAR a Make pro CI/CD
Advertisement 728x90

Automatizace sestavení firmware pro STM32 s IAR prostřednictvím GNU Make pro CI/CD

Integrace kompilátoru IAR s GNU Make otevírá cestu k průmyslové automatizaci vývoje vestavěných systémů, eliminuje závislost na IDE a zjednodušuje procesy CI/CD. Tento přístup umožňuje sestavovat firmware pro mikrokontroléry STM32 přímo z konzole, zajišťuje reprodukovatelnost, škálovatelnost a integraci se systémy průběžné integrace.

Analýza IAR ToolChain a jeho konzolových nástrojů

IAR Embedded Workbench poskytuje sadu konzolových nástrojů, které provádějí všechny fáze kompilace a linkování. Klíčové komponenty zahrnují:

  • iasmarm.exe — assembler pro ARM.
  • iccarm.exe — kompilátor C/C++ pro ARM.
  • ilinkarm.exe — linkovač.
  • ielftool.exe — nástroj pro generování binárních souborů (HEX, BIN).

Tyto nástroje jsou volány z IDE při grafickém sestavení, ale lze je přímo používat ve skriptech. Analýza logu sestavení z IDE IAR umožňuje určit přesné klíče příkazového řádku, které se používají pro každý nástroj. Například pro kompilátor iccarm.exe typické volby zahrnují --cpu=Cortex-M4, --fpu=VFPv4_sp, --debug a příznaky vypnutí optimalizací, jako jsou --no_inline nebo --no_cse.

Google AdInline article slot

Struktura Makefile pro IAR

Hlavní úkol — vytvořit Makefile, který správně volá nástroje IAR s potřebnými parametry. Skript by měl pružně určovat cesty k nástrojům, buď prostřednictvím proměnné prostředí IAR_PATH, nebo prostřednictvím systémového PATH. Příklad definice proměnných pro nástroje:

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

Klíčové sekce Makefile zahrnují:

  • Definice příznaků kompilace (CFLAGS): sada voleb specifických pro IAR, jako je volba jádra procesoru, FPU a ladicích informací.
  • Příznaky assembleru (ASFLAGS): parametry pro zpracování assemblerových souborů.
  • Příznaky linkování (LDFLAGS): volby linkovače, včetně konfiguračního souboru (.icf) a vstupního bodu.
  • Pravidla sestavení: cíle pro kompilaci zdrojových souborů (.c, .s) do objektových souborů (.o) a následné linkování do spustitelného souboru (.out).

Konfigurace kompilátoru a klíčové volby

Pro úspěšné sestavení je nutné správně nastavit volby kompilátoru IAR. Hlavní klíče používané v typickém projektu pro STM32F407 (Cortex-M4) zahrnují:

Google AdInline article slot
  • --cpu=Cortex-M4: určení cílového procesorového jádra.
  • --fpu=VFPv4_sp: aktivace jednotky výpočtů s plovoucí desetinnou čárkou.
  • --endian=little: pořadí bajtů.
  • -e: zapnutí jazykových rozšíření C od IAR.
  • --debug: přidání ladicích informací.
  • Příznaky řízení optimalizace, například --no_inline pro zákaz inline funkcí.

Tyto volby jsou sesbírány v proměnné COMPILE_IAR_OPT v Makefile. Dále mohou být potlačena specifická diagnostická hlášení kompilátoru pomocí --diag_suppress.

Proces linkování a generování konečných artefaktů

Linkovač IAR (ilinkarm.exe) spojuje objektové soubory pomocí linkovacího skriptu (.icf), který definuje umístění sekcí v paměti mikrokontroléru. Klíčové volby linkovače:

  • --config $(LDSCRIPT): určení souboru konfigurace linkování.
  • --entry __iar_program_start: vstupní bod programu.
  • --semihosting: podpora semihostingu pro ladění.
  • --map $(BUILD_DIR)/$(TARGET).map: generace mapy paměti.

Po vytvoření souboru .out nástroj ielftool.exe jej převádí do formátů vhodných pro nahrání do mikrokontroléru:

Google AdInline article slot
  • --ihex pro generování HEX souboru.
  • --bin pro vytvoření binárního obrazu.

Integrace s CI/CD a výhody přístupu

Použití GNU Make pro sestavení s IAR poskytuje několik kritických výhod v průmyslovém vývoji:

  • Automatizace: sestavení mohou být spouštěna automaticky na CI/CD serverech (například Jenkins, GitLab CI) bez ručního zásahu.
  • Reprodukovatelnost: Makefile zaručuje identické výsledky sestavení na různých strojích, na rozdíl od nastavení IDE, která mohou záviset na prostředí.
  • Škálovatelnost: snadno přidávat nové konfigurace sestavení (například pro různé modely zařízení) změnou několika řádků v Makefile, nikoli ruční úpravou desítek konfigurací v IDE.
  • Nezávislost na IDE: vývojáři mohou používat jakýkoli textový editor nebo vývojové prostředí, aniž by byli vázáni k IAR Embedded Workbench.
  • Porovnání kompilátorů: možnost rychlého přepínání mezi různými kompilátory (například IAR a GCC) pro další kontrolu kódu a hledání chyb.

Praktické kroky k implementaci

  • Nainstalujte IAR Embedded Workbench a ujistěte se, že konzolové nástroje jsou dostupné v PATH nebo definujte proměnnou IAR_PATH.
  • Analyzujte existující projekt IAR, vygenerovaný například přes STM32CubeMX, abyste extrahovali klíče kompilace z logu sestavení IDE.
  • Vytvořte základní Makefile, definujte proměnné pro nástroje, příznaky kompilace a linkování a pravidla sestavení.
  • Přizpůsobte linkovací skript (.icf) pro vaši cílovou platformu, pokud je to nutné.
  • Otestujte sestavení z příkazového řádku, ujistěte se, že jsou generovány správné artefakty (HEX, BIN).
  • Integrujte do CI/CD, přidejte volání make do pipeline sestavení.

Co je důležité

  • Automatizace sestavení: GNU Make umožňuje plně automatizovat proces kompilace firmware s IAR, vylučuje ruční operace v IDE.
  • Flexibilita konfigurace: snadno spravovat množství konfigurací sestavení přes Makefile, což je kritické pro projekty s širokým sortimentem produktů.
  • Integrace s CI/CD: přístup zajišťuje bezproblémovou integraci se systémy průběžné integrace a doručování, zrychluje cykly vývoje.
  • Nezávislost na nástrojích: vývojáři nejsou vázáni na konkrétní IDE, což zvyšuje flexibilitu pracovního postupu.
  • Zlepšení kvality kódu: možnost sestavení různými kompilátory pomáhá odhalovat skryté chyby a zlepšovat přenositelnost kódu.

— Editorial Team

Advertisement 728x90

Číst dál