14.2. Постачання застосунку

Працюючий скрипт на столі і готовий продукт – це не одне й те саме. Камера, що йде в поле, повинна працювати самостійно протягом усього терміну служби продукту – місяці, роки – без оператора за консоллю, без підключеного IDE та без фахівця Python поруч, коли щось перестає працювати. Сторінки цього розділу описують, що змінюється в застосунку, коли ціль – готовий продукт, а не демонстрація за столом.

14.2.1. Передстартовий перелік

Перш ніж камера покине стенд, ось короткий список речей, які мають бути виконані:

  • Код застосунку міститься у збірці, а не у файловій системі. Заморожені модулі та образ ROMFS охоплюють код і ресурси. Флеш-пам’ять та картка SD призначені лише для стану виконання та журналів. Кінцевий користувач не може редагувати, видаляти або замінювати застосунок без перепрошивки.

  • Watchdog працює безперервно. machine.WDT запускається на початку main.py та скидається на кожній ітерації основного циклу. Будь-яке зависання довше за налаштований тайм-аут призводить до апаратного скидання і камера відновлює роботу.

  • Застосунок веде журнал у відновлюване місце призначення. Бібліотека logging записує рядки з рівнем, часовою міткою та місцем призначення, з якого можна відновити дані в полі з картки SD. print() призначений лише для розробки – його стандартне місце призначення – USB stdout, який жоден готовий продукт не читає.

  • Флеш-пам’ять і картка SD розглядаються як потенційно ненадійні. Внутрішня флеш-пам’ять зберігає невеликі записи фіксованого розміру (конфігурація, останнє відоме калібрування); картка SD зберігає великі змінні файли (зображення, журнали); операції з обома обгортаються в обробку помилок, і застосунок має визначений запасний варіант на випадок недоступності будь-якого з них.

14.2.2. Вбудовування застосунку у збірку

Два взаємодоповнюючі механізми розміщують файли в образі мікропрограми: