Обзор встраиваемых систем
Встраиваемые системы — специализированные компьютеры для выполнения конкретных функций. Они работают в бытовой технике, медицинских устройствах, автомобильных системах и промышленных контроллерах. Встраиваемый код работает на оборудовании с ограниченными ресурсами, требованиями реального времени и прямым взаимодействием с аппаратурой.
Компоненты архитектуры
- Микроконтроллер (MCU): Процессор + память + периферия на одном чипе (ARM Cortex-M, ESP32, STM32)
- RTOS: FreeRTOS, Zephyr, VxWorks — детерминированное планирование задач
- HAL (Hardware Abstraction Layer): Программный интерфейс между прошивкой и периферией
- Драйверы периферии: GPIO, UART, SPI, I2C, ADC, PWM
- Загрузчик (Boot Loader): Начальный код для загрузки прошивки и управления обновлениями
Стратегии тестирования встраиваемых систем
Unit-тестирование на целевом устройстве
Unit-тесты должны запускаться на реальном целевом оборудовании:
- Фреймворк, адаптированный для ограниченных сред (Unity, CppUTest)
- Вывод результатов через UART serial
- Проверка использования памяти на каждый тест
- Тестирование обработчиков прерываний
Hardware-in-the-Loop (HIL) тестирование
HIL позволяет тестировать сценарии, невозможные в реальном мире:
- Экстремальные показания температурных датчиков
- Одновременный отказ нескольких датчиков
- Edge cases тайминга (точность микросекунд)
- Инъекция неисправностей
Стандарты Safety-Critical
IEC 61508
Определяет уровни целостности безопасности (SIL 1-4):
- SIL 1: Базовое тестирование, ревью кода
- SIL 2: Формальное проектирование тестов, метрики покрытия
- SIL 3: MC/DC покрытие, формальные методы
- SIL 4: Формальная верификация
Рекомендации MISRA C/C++
- Без динамического выделения памяти
- Без рекурсии
- Ограниченная арифметика указателей
- Все case в switch должны иметь break
Продвинутое тестирование встраиваемых систем
Тестирование реального времени
- Анализ worst-case execution time (WCET)
- Измерение задержки прерываний
- Проверка вытеснения задач
- Обнаружение инверсии приоритетов
- Измерение джиттера периодических задач
Инъекция неисправностей
- Bit flip в памяти (имитация радиационных эффектов)
- Ошибки шины связи (сбой CRC, тайм-аут)
- Отказы датчиков (застрявшие значения, шум, дрейф)
- Аномалии питания (просадки, скачки)
Испытания в среде
- Диапазон температур (-40°C до +85°C промышленный класс)
- Вибрация и удары
- ЭМС/ЭМП испытания
- Устойчивость к влажности
Практическое задание
Разработайте тест-план для встраиваемого контроллера мотора:
- Unit-тесты: Алгоритм PID с известными входами и ожидаемыми выходами
- HIL: Имитировать датчик положения, проверить реакцию контроллера
- Тайминг: Проверить, что цикл управления укладывается в дедлайн 1мс
- Обработка сбоев: Поведение при отказе датчика положения
- Безопасность: Аварийная остановка активируется за 10мс
Руководство по решению
Unit-тесты PID:
- Ступенчатый отклик: проверить сходимость в рамках спецификации
- Установившийся режим: проверить стабильность с минимальными колебаниями
- Возмущение: проверить время восстановления
Тесты безопасности:
- Сигнал аварийной остановки → отключение питания мотора за 10мс
- Обнаружен отказ датчика → безопасное состояние за 50мс
- Тайм-аут watchdog → сброс и перезапуск в безопасном режиме
Советы из практики
- Всегда тестируйте на реальном оборудовании — эмуляторы не воспроизводят тайминг и прерывания точно
- Автоматизируйте HIL-тестирование — ручное тестирование оборудования медленное и невоспроизводимое
- Отслеживайте использование памяти — без виртуальной памяти исчерпание означает крах
- Тщательно тестируйте переходы питания — баги в циклах sleep/wake трудно воспроизвести
- Используйте статический анализ (MISRA) как первую линию обороны
Ключевые выводы
- Тестирование встраиваемых систем требует ко-верификации аппаратуры и ПО
- Требования реального времени диктуют верификацию тайминга, а не только функциональной корректности
- Стандарты safety-critical (IEC 61508, MISRA) обязывают использовать конкретные техники и документацию
- HIL-тестирование позволяет проверять сценарии, невозможные или опасные в физическом мире