Обзор встраиваемых систем

Встраиваемые системы — специализированные компьютеры для выполнения конкретных функций. Они работают в бытовой технике, медицинских устройствах, автомобильных системах и промышленных контроллерах. Встраиваемый код работает на оборудовании с ограниченными ресурсами, требованиями реального времени и прямым взаимодействием с аппаратурой.

Компоненты архитектуры

  • Микроконтроллер (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) тестирование

graph LR A[Симулятор] -->|Сигналы датчиков| B[Встраиваемое устройство] B -->|Команды исп. устройств| A A -->|Проверка ответа| C[Автоматизация]

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 промышленный класс)
  • Вибрация и удары
  • ЭМС/ЭМП испытания
  • Устойчивость к влажности

Практическое задание

Разработайте тест-план для встраиваемого контроллера мотора:

  1. Unit-тесты: Алгоритм PID с известными входами и ожидаемыми выходами
  2. HIL: Имитировать датчик положения, проверить реакцию контроллера
  3. Тайминг: Проверить, что цикл управления укладывается в дедлайн 1мс
  4. Обработка сбоев: Поведение при отказе датчика положения
  5. Безопасность: Аварийная остановка активируется за 10мс
Руководство по решению

Unit-тесты PID:

  • Ступенчатый отклик: проверить сходимость в рамках спецификации
  • Установившийся режим: проверить стабильность с минимальными колебаниями
  • Возмущение: проверить время восстановления

Тесты безопасности:

  • Сигнал аварийной остановки → отключение питания мотора за 10мс
  • Обнаружен отказ датчика → безопасное состояние за 50мс
  • Тайм-аут watchdog → сброс и перезапуск в безопасном режиме

Советы из практики

  1. Всегда тестируйте на реальном оборудовании — эмуляторы не воспроизводят тайминг и прерывания точно
  2. Автоматизируйте HIL-тестирование — ручное тестирование оборудования медленное и невоспроизводимое
  3. Отслеживайте использование памяти — без виртуальной памяти исчерпание означает крах
  4. Тщательно тестируйте переходы питания — баги в циклах sleep/wake трудно воспроизвести
  5. Используйте статический анализ (MISRA) как первую линию обороны

Ключевые выводы

  1. Тестирование встраиваемых систем требует ко-верификации аппаратуры и ПО
  2. Требования реального времени диктуют верификацию тайминга, а не только функциональной корректности
  3. Стандарты safety-critical (IEC 61508, MISRA) обязывают использовать конкретные техники и документацию
  4. HIL-тестирование позволяет проверять сценарии, невозможные или опасные в физическом мире