Volver al inicio

Compilación STM32 con IAR vía GNU Make: Automatización para CI/CD

El artículo describe el proceso de configuración de GNU Make para la compilación automática de firmware STM32 usando el compilador IAR. Cubre utilidades clave de IAR, estructura de Makefile, configuración de opciones de compilación y enlace, así como los beneficios de la integración con sistemas CI/CD para el desarrollo industrial.

Automatiza la compilación STM32 con IAR y Make para CI/CD
Advertisement 728x90

Automatización de compilaciones de firmware STM32 con IAR y GNU Make para CI/CD

Integrar el compilador IAR con GNU Make desbloquea una automatización de nivel industrial para el desarrollo de sistemas embebidos, eliminando la dependencia de IDE y agilizando las tuberías CI/CD. Este método permite compilar firmware para microcontroladores STM32 directamente desde la línea de comandos, garantizando reproducibilidad, escalabilidad e integración fluida con sistemas de integración continua.

Desglose de la cadena de herramientas IAR y sus utilidades de línea de comandos

IAR Embedded Workbench incluye herramientas de línea de comandos que manejan cada paso de compilación y enlace. Los componentes clave son:

  • iasmarm.exe — Ensamblador ARM.
  • iccarm.exe — Compilador C/C++ para ARM.
  • ilinkarm.exe — Enlazador.
  • ielftool.exe — Utilidad para generar archivos binarios (HEX, BIN).

Estas herramientas se invocan en segundo plano por el IDE durante compilaciones gráficas, pero puedes llamarlas directamente en scripts. Al inspeccionar el registro de compilación del IDE IAR, puedes identificar las banderas exactas de línea de comandos usadas para cada herramienta. Por ejemplo, opciones típicas para el compilador iccarm.exe incluyen --cpu=Cortex-M4, --fpu=VFPv4_sp, --debug, y banderas para desactivar optimizaciones como --no_inline o --no_cse.

Google AdInline article slot

Creación de un Makefile para IAR

El objetivo principal es elaborar un Makefile que invoque correctamente las herramientas IAR con los parámetros adecuados. El script debe localizar las herramientas de forma flexible mediante la variable de entorno IAR_PATH o el PATH del sistema. Aquí un ejemplo para definir variables de herramientas:

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

Secciones esenciales del Makefile incluyen:

  • Banderas de compilación (CFLAGS): Opciones específicas de IAR como selección del núcleo objetivo, configuración FPU e información de depuración.
  • Banderas del ensamblador (ASFLAGS): Parámetros para manejar archivos de ensamblado.
  • Banderas del enlazador (LDFLAGS): Opciones del enlazador, incluyendo el archivo de configuración (.icf) y punto de entrada.
  • Reglas de compilación: Objetivos para compilar archivos fuente (.c, .s) en archivos objeto (.o) y enlazarlos en un ejecutable (.out).

Configuración del compilador y opciones clave

Para compilaciones confiables, debes acertar con las opciones del compilador IAR. Banderas comunes para un proyecto típico STM32F407 (Cortex-M4) incluyen:

Google AdInline article slot
  • --cpu=Cortex-M4: Especifica el núcleo de CPU objetivo.
  • --fpu=VFPv4_sp: Activa la unidad de punto flotante.
  • --endian=little: Establece el orden de bytes.
  • -e: Habilita extensiones del lenguaje C de IAR.
  • --debug: Agrega información de depuración.
  • Controles de optimización como --no_inline para desactivar funciones inline.

Estas se agrupan en la variable COMPILE_IAR_OPT de tu Makefile. También puedes suprimir advertencias específicas del compilador con --diag_suppress.

Proceso de enlace y generación de artefactos finales

El enlazador IAR (ilinkarm.exe) combina archivos objeto usando un script de enlace (.icf) que mapea secciones a la memoria del microcontrolador. Opciones clave del enlazador:

  • --config $(LDSCRIPT): Apunta al archivo de configuración del enlazador.
  • --entry __iar_program_start: Define el punto de entrada del programa.
  • --semihosting: Habilita semihosting para depuración.
  • --map $(BUILD_DIR)/$(TARGET).map: Genera un mapa de memoria.

Una vez listo el archivo .out, ielftool.exe lo convierte a formatos flashables:

Google AdInline article slot
  • --ihex para archivos HEX.
  • --bin para imágenes binarias.

Integración CI/CD y beneficios clave

Aprovechar GNU Make con IAR ofrece ventajas transformadoras para el desarrollo profesional de embebidos:

  • Automatización: Activa compilaciones automáticamente en servidores CI/CD (p. ej., Jenkins, GitLab CI) sin pasos manuales.
  • Reproducibilidad: Los Makefiles aseguran resultados consistentes entre máquinas, a diferencia de configuraciones de IDE que varían por entorno.
  • Escalabilidad: Agrega nuevas configuraciones de compilación (p. ej., para modelos de dispositivos distintos) ajustando unas pocas líneas, no editando docenas de setups de IDE.
  • Independencia de IDE: Usa cualquier editor o IDE — sin ataduras a IAR Embedded Workbench.
  • Comparación de compiladores: Cambia fácilmente entre compiladores (p. ej., IAR y GCC) para verificación cruzada y caza de errores.

Guía de implementación paso a paso

  • Instala IAR Embedded Workbench y asegúrate de que las herramientas de línea de comandos estén en el PATH o configura la variable IAR_PATH.
  • Analiza tu proyecto IAR existente (p. ej., de STM32CubeMX) para extraer banderas del compilador del registro de compilación del IDE.
  • Crea un Makefile base con variables de herramientas, banderas de compilación/enlace y reglas de compilación.
  • Ajusta el script de enlace (.icf) para tu plataforma objetivo si es necesario.
  • Prueba la compilación desde la línea de comandos, verificando salidas HEX/BIN.
  • Intégralo en CI/CD agregando una llamada a make en tu pipeline.

Lecciones clave

  • Automatización de compilación: GNU Make automatiza completamente la compilación de firmware IAR, eliminando trabajo manual del IDE.
  • Flexibilidad de configuración: Gestiona fácilmente múltiples variantes de compilación vía Makefile — vital para proyectos de líneas de productos.
  • Integración CI/CD: Se integra sin problemas en integración/entrega continua, acelerando ciclos de desarrollo.
  • Independencia de herramientas: Libera a los desarrolladores de IDE específicos, impulsando la flexibilidad del flujo de trabajo.
  • Mejora de calidad de código: Compilaciones multi-compilador descubren errores ocultos y mejoran la portabilidad.

— Editorial Team

Advertisement 728x90

Leer después