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.
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í:
--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_inlinepro 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:
--ihexpro generování HEX souboru.--binpro 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
Zatím žádné komentáře.