DÍA 266 DE 365

Fase 5: Diseño Industrial y Proyecto Final

📖 Teoría a Estudiar

El Gemelo Digital y la Inmutabilidad (CI/CD)

CI (Continuous Integration): Significa que cada vez que tú o un miembro de tu equipo guardan un cambio en el código (hacen git push), un servidor en la nube (ej. GitHub Actions, GitLab CI) crea una máquina virtual limpia, descarga la cadena de herramientas exacta (GNU Arm Embedded Toolchain), compila tu código y ejecuta pruebas automáticas.

CD (Continuous Deployment): Si la compilación es exitosa y cumple con las reglas MISRA-C, el servidor empaqueta el archivo .bin, calcula su Checksum (CRC/SHA256) y lo inyecta automáticamente en los servidores de Amazon Web Services (AWS) listo para que tu flota de máquinas lo descargue vía FOTA.

¿Por qué es obligatorio en Hardware? (Reproducibilidad)

En el mundo del software web, si algo falla, recargas la página. En el mundo del hardware, un binario compilado con el parámetro de optimización -O3 puede alterar los retardos de tiempo que usa tu bus SPI, destruyendo la comunicación con el Caudalímetro. Al usar CI/CD, garantizamos Inmutabilidad: el binario de producción siempre será generado por el mismo robot, en el mismo sistema operativo (Ubuntu Linux), con las mismas banderas exactas de compilación, eliminando el error humano.

PIPELINE CI/CD: COMPILACIÓN C/C++ Y DESPLIEGUE AUTOMATIZADO Local Dev Escribe Código git push SERVIDOR EN LA NUBE (CI RUNNER Ubuntu) 1. CLONAR Y PREPARAR ENTORNO Descarga repo e instala GCC ARM Embedded Toolchain 2. ANÁLISIS ESTÁTICO (Cppcheck) Revisa desbordamientos, punteros nulos y reglas C 3. BUILD (Make / CMake) Compila código cruzado usando 'arm-none-eabi-gcc' .bin AWS / OTA FW_v1.2.bin Aprobado y Firmado Descarga por Flota STM32

⚙️ Ejercicios Prácticos

El Archivo YAML (La Receta del Robot): Configurar CI/CD moderno ya no requiere montar servidores Jenkins complejos. Usaremos GitHub Actions. Creamos un archivo oculto en nuestro repositorio en la ruta .github/workflows/firmware_build.yml. Este archivo contiene las instrucciones (script) que le dirán a los servidores de Microsoft/GitHub cómo construir exactamente el binario del Despachador de Gas LP.

Ejercicio 1: El Pipeline YAML de Hardware. Escribiremos el flujo de trabajo que se activará cada vez que hagamos un `push` a la rama `main`.


# ==============================================================================
# ARCHIVO: .github/workflows/firmware_build.yml
# ==============================================================================
name: CI Firmware Build (STM32)

# El evento que dispara este flujo de trabajo
on:
  push:
    branches: [ "main", "release/*" ]
  pull_request:
    branches: [ "main" ]

# Trabajos a ejecutar
jobs:
  build-and-analyze:
    name: Compilar y Analizar Firmware STM32
    # Máquina virtual en la que correremos (Servidor Linux provisto por GitHub)
    runs-on: ubuntu-latest

    steps:
    # 1. CLONAR EL REPOSITORIO
    - name: Checkout del código fuente
      uses: actions/checkout@v3
      with:
        submodules: recursive # Importante si usas librerías como FreeRTOS en submódulos

    # 2. INSTALAR DEPENDENCIAS DE HARDWARE (ARM TOOLCHAIN)
    - name: Instalar GNU Arm Embedded Toolchain
      run: |
        sudo apt-get update
        # Instala el compilador oficial de ARM para Cortex-M y la herramienta Make
        sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi build-essential cmake

    # 3. ANÁLISIS ESTÁTICO DE CÓDIGO (Pre-compilación)
    - name: Análisis MISRA-C Básico (Cppcheck)
      run: |
        sudo apt-get install -y cppcheck
        # Busca desbordamientos, variables no usadas y bugs lógicos
        # Fallará el pipeline si encuentra un error grave.
        cppcheck --enable=all --error-exitcode=1 --inconclusive -I Core/Inc Core/Src

    # 4. CONSTRUCCIÓN (BUILD)
    # Suponiendo un proyecto exportado de STM32CubeMX con Makefile generado
    - name: Compilar Firmware (Make)
      run: |
        # Entra a la carpeta del proyecto y ejecuta el Make
        # -j4 usa 4 núcleos de CPU para acelerar la compilación
        make -j4
        
        # Opcional: Imprime el tamaño de las secciones Flash/RAM
        arm-none-eabi-size build/despachador_gas_lp.elf

    # 5. GENERAR SHA-256 PARA INTEGRIDAD DE FOTA
    - name: Generar Hash del Binario
      run: |
        sha256sum build/despachador_gas_lp.bin > build/despachador_gas_lp.bin.sha256
        cat build/despachador_gas_lp.bin.sha256

    # 6. GUARDAR LOS ARTEFACTOS (El producto final)
    # Toma los archivos compilados y los guarda en GitHub para su descarga 
    # o posterior envío a los servidores OTA.
    - name: Subir Artifacts de Firmware
      uses: actions/upload-artifact@v3
      with:
        name: Firmware-Release-Binaries
        path: |
          build/despachador_gas_lp.bin
          build/despachador_gas_lp.elf
          build/despachador_gas_lp.bin.sha256
        retention-days: 30
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Control de Calidad Estricto y DevOps aplicado a Sistemas Ciberfísicos (CPS).

El error más grande de las startups de hardware es escalar la producción usando archivos `.bin` creados de forma artesanal. Si un cliente reporta que la "Versión 2.4" congela el despachador de gas, y le preguntas al desarrollador: "¿Con qué bandera de compilación generaste la versión 2.4 hace tres meses?", el desarrollador no se acordará. Esa pérdida de trazabilidad es inaceptable en una auditoría forense industrial.

Al programar tu **Pipeline YAML de CI/CD**, le has extirpado el factor humano al ensamblaje de tu software. Ahora, tu tesis puede presumir una "Cadena de Suministro de Software" inquebrantable. Cada vez que integras código nuevo, un servidor limpio y aséptico descarga el compilador exacto (`gcc-arm-none-eabi`), audita el código C en busca de violaciones de punteros (`cppcheck`), lo compila, le extrae el tamaño exacto en memoria, y lo sella criptográficamente con un SHA-256. Tienes trazabilidad absoluta: sabes exactamente qué línea de código produjo qué archivo binario. Has pasado de ser un programador que "compila en su laptop" a un Arquitecto de Software que dirige una planta de ensamblaje digital en la Nube.

📝 Resumen del Día