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)
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:
- Unit tests: Algoritmo PID con inputs conocidos
- HIL: Simular sensor de posición, verificar respuesta del controlador
- Timing: Verificar que el loop de control ejecuta dentro del deadline de 1ms
- Manejo de fallos: Comportamiento cuando el sensor falla
- 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
- Siempre testea en hardware real — los emuladores no reproducen timing e interrupciones con precisión
- Automatiza testing HIL — el testing manual de hardware es lento y no reproducible
- Monitorea uso de memoria — sin memoria virtual, agotarla significa crash
- Testea transiciones de energía exhaustivamente — bugs en sleep/wake son difíciles de reproducir
- Usa análisis estático (MISRA) como primera línea de defensa
Conclusiones Clave
- El testing embebido requiere co-verificación hardware-software
- Los requisitos de tiempo real demandan verificación de timing, no solo corrección funcional
- Los estándares safety-critical mandatan técnicas y documentación específicas
- HIL testing permite testear escenarios imposibles o peligrosos en el mundo físico