Panorama de Sistemas Embebidos

Los sistemas embebidos son computadoras especializadas diseñadas para funciones dedicadas. Alimentan desde electrodomésticos hasta dispositivos médicos y sistemas automotrices. El código embebido corre en hardware con recursos limitados, requisitos de tiempo real e interacción directa con hardware.

Componentes de Arquitectura

  • Microcontrolador (MCU): CPU + memoria + periféricos en un chip (ARM Cortex-M, ESP32, STM32)
  • RTOS: FreeRTOS, Zephyr, VxWorks — scheduling determinista de tareas
  • HAL (Hardware Abstraction Layer): Interfaz entre firmware y periféricos
  • Drivers de Periféricos: GPIO, UART, SPI, I2C, ADC, PWM
  • Boot Loader: Código inicial que carga firmware y gestiona actualizaciones

Estrategias de Testing Embebido

Unit Testing en Target

Los unit tests embebidos deben correr en el hardware real:

  • Framework adaptado (Unity, CppUTest)
  • Resultados reportados via UART serial
  • Verificación de uso de memoria por test
  • Testing de interrupt handlers

Testing Hardware-in-the-Loop (HIL)

graph LR A[Simulador] -->|Señales de Sensor| B[Dispositivo Embebido] B -->|Comandos de Actuador| A A -->|Verificar Respuesta| C[Automatización]

HIL permite testear escenarios imposibles en el mundo real:

  • Lecturas extremas de sensores de temperatura
  • Fallo simultáneo de múltiples sensores
  • Edge cases de timing (precisión de microsegundos)
  • Inyección de fallos

Estándares Safety-Critical

IEC 61508

Define Safety Integrity Levels (SIL 1-4):

  • SIL 1: Testing básico, revisión de código
  • SIL 2: Diseño formal de tests, métricas de cobertura
  • SIL 3: MC/DC coverage, métodos formales
  • SIL 4: Verificación formal

Guías MISRA C/C++

  • Sin allocación dinámica de memoria
  • Sin recursión
  • Aritmética de punteros restringida
  • Todos los casos switch deben tener break

Testing Avanzado Embebido

Testing de Tiempo Real

  • Análisis de worst-case execution time (WCET)
  • Medición de latencia de interrupciones
  • Verificación de preemption de tareas
  • Detección de inversión de prioridad
  • Medición de jitter para tareas periódicas

Inyección de Fallos

  • Bit flips en memoria
  • Errores de bus de comunicación
  • Fallos de sensores
  • Anomalías de alimentación (brownouts, picos)

Testing Ambiental

  • Rango de temperatura (-40°C a +85°C grado industrial)
  • Vibración y choque
  • Testing EMC/EMI
  • Resistencia a humedad

Ejercicio Práctico

Diseña un plan de testing para un controlador de motor embebido:

  1. Unit tests: Algoritmo PID con inputs conocidos
  2. HIL: Simular sensor de posición, verificar respuesta del controlador
  3. Timing: Verificar que el loop de control ejecuta dentro del deadline de 1ms
  4. Manejo de fallos: Comportamiento cuando el sensor falla
  5. Seguridad: Parada de emergencia activa dentro de 10ms
Guía de Solución

Unit tests PID:

  • Step response: verificar convergencia dentro de especificación
  • Estado estable: verificar salida estable con mínima oscilación
  • Perturbación: verificar tiempo de recuperación

Tests de seguridad:

  • Input de parada de emergencia → corte de energía al motor en 10ms
  • Fallo de sensor detectado → estado seguro en 50ms
  • Timeout de watchdog → reset y reinicio en modo seguro

Tips Profesionales

  1. Siempre testea en hardware real — los emuladores no reproducen timing e interrupciones con precisión
  2. Automatiza testing HIL — el testing manual de hardware es lento y no reproducible
  3. Monitorea uso de memoria — sin memoria virtual, agotarla significa crash
  4. Testea transiciones de energía exhaustivamente — bugs en sleep/wake son difíciles de reproducir
  5. Usa análisis estático (MISRA) como primera línea de defensa

Conclusiones Clave

  1. El testing embebido requiere co-verificación hardware-software
  2. Los requisitos de tiempo real demandan verificación de timing, no solo corrección funcional
  3. Los estándares safety-critical mandatan técnicas y documentación específicas
  4. HIL testing permite testear escenarios imposibles o peligrosos en el mundo físico