7 атрибутов хорошего firmware

37519816f1b6e2b38bb19f90f5cc2ab5.jpg

В этой статья я бы хотел обобщить, перечислить и обсудить общие системные поведенческие атрибуты хорошего firmware (прошивки) для микроконтроллерных проектов, которые не зависят от конкретного приложения или проекта. Это может показаться очевидно, но в 9 из 10 российских embedded компаний этого нет.

1 Сторожевой таймер

Прошивка может зависнуть при некорректных входных данных. Сторожевой таймер позволяет автоматически перезагрузиться и устройство не останется тыквой.

2 Загрузчик

Программатор есть не всегда. Программатор часто не видит микроконтроллер из-за статического электричества или из-за длинного шлейфа. Часто программатор в одном единственном экземпляре на всю компанию. Загрузка программатором это чисто developer (ская) прерогатива. У Customer нет и не будет отладчика и особого шлейфа для него. Загрузчик по UART позволит записать новый артефакт на дешевом переходнике USB-UART. Также загрузчик позволит наладить DevOps и авто-тесты внутри компании. В идеале загрузчик должен уметь загрузить бинарь по всем доступным интерфейсам которые только есть на плате (PCB). 

3 Файловая система NorFlashFs

Энергонезависимая Key-Value Map (ка). Есть десятки способов ее реализовать.  Файловая система для хранения многочисленных параметров: счетчик загрузок, наработки на отказ, настройки трансиверов, серийные номера и прочее. Это позволит не настраивать устройство заново каждый раз после пропадания питания.

4 Модульные тесты

Тесты позволяют делать безопасный рефакторинг, локализовать причины сбоев. Код тестов должен быть встроен прямо внутрь кода прошивки. По крайней мере для Debug сборок. Тесты можно запускать как при старте питания так и по команде из CLI.

5 Health Monitor (HM)

Это отдельная задача, поток или периодическая функция, которая просто периодически проверяет все компоненты, счетчики ошибок и в случае, если возникли какие-то ошибки как-то сообщает об этом пользователю. HM должен работать непрерывно. Например при ошибке посылает красный текст в CLI-UART, а при предупреждении -желтый. health монитор повысит надежность изделия в целом и позволит найти ошибки, которые не обнаружили модульные тесты.

6 Command Line Interface (CLIшка)

Это интерфейс командной строки поверх UART. Как в Linux только в случае с микроконтроллером. Это чтобы общаться с устройством на человеческом языке. Запускать тесты софта и железа. В общем для тотального управления гаджетом.

С помощью CLI вы сможете запрограммировать поведение устройства уже после записи самой прошивки во Flash. Просто подключившись в UART TeraTerm и отправив несколько команд. А без этого вам бы пришлось варить еще одну сборку с какой-то специфической функцией на 1 раз.

7 Диагностика 

У каждого компонента есть внутренние состояния: режимы микросхем, какие-то конкретные переменные: up-time счетчики, дата,   время сборки артефакта, версия, ветка, последний коммит. Всё это надо просматривать через CLIшку. Для этого и нужна подробная диагностика.

Вывод

Как по мне эти 7 атрибутов это просто джентльменский набор любого разработчика. Если вам есть что добавить к изложенному списку, то предлагаю обсудить этот в комментариях.

© Habrahabr.ru