14.2. Поставка приложения¶
Работающий скрипт на стенде и готовый к поставке продукт – это не одно и то же. Камера, отправляющаяся в полевые условия, должна работать самостоятельно столько, сколько установлен продукт – месяцы, годы – без оператора за консолью, без подключённой IDE и без эксперта по Python поблизости, когда что-то перестаёт работать. Страницы в этом разделе описывают, что меняется в приложении, когда цель – готовый к поставке продукт, а не демонстрация на столе.
14.2.1. Контрольный список перед запуском¶
Прежде чем камера покинет стенд, вот краткий список того, что должно быть верным:
Код приложения находится в сборке, а не в файловой системе. Замороженные модули и образ ROMFS покрывают код и ресурсы. Хранилище флеш-памяти и SD-карты предназначено только для состояния времени выполнения и файлов журналов. Конечный пользователь не может редактировать, удалять или заменять приложение без перепрошивки.
Сторожевой таймер работает непрерывно.
machine.WDTзапускается в началеmain.pyи подкармливается один раз за итерацию основного цикла. Любое зависание дольше настроенного тайм-аута вызывает аппаратный сброс, и камера снова запускается.Приложение ведёт журнал в восстанавливаемое место назначения. Библиотека
loggingзаписывает записи с уровнем, отметкой времени и местом назначения, которое в полевых условиях можно восстановить с SD-карты.print()предназначен только для времени разработки – его место назначения по умолчанию – стандартный вывод USB, который не читает ни один готовый к поставке продукт.Флеш-память и SD рассматриваются как способные дать сбой. Внутренняя флеш-память хранит небольшие записи фиксированного размера (конфигурацию, последнюю известную калибровку); SD хранит объёмные файлы переменного размера (захваченные изображения, файлы журналов); операции с любым из них обёрнуты в обработку ошибок, и приложение имеет определённый запасной вариант, когда любое из них недоступно.
14.2.2. Встраивание приложения в сборку¶
Два взаимодополняющих механизма помещают файлы в образ прошивки: