14.2. Livrarea aplicației¶
Un script funcțional pe bancul de lucru și un produs livrat nu sunt același lucru. O cameră care ajunge în teren trebuie să ruleze pe cont propriu atâta timp cât produsul este instalat – luni, ani – fără un operator la consolă, fără un IDE atașat și fără un expert Python prin preajmă atunci când ceva încetează să funcționeze. Paginile din această secțiune acoperă ceea ce se schimbă la aplicație atunci când scopul este un produs livrat în loc de o demonstrație pe birou.
14.2.1. O listă de verificare înainte de lansare¶
Înainte ca o cameră să părăsească bancul de lucru, aceasta este lista scurtă de lucruri care ar trebui să fie adevărate:
Codul aplicației se află în build, nu pe sistemul de fișiere. Modulele înghețate și o imagine ROMFS acoperă codul și activele. Stocarea pe flash și pe cardul SD este doar pentru starea de execuție și fișierele de jurnal. Utilizatorul final nu poate edita, șterge sau înlocui aplicația fără a reprograma firmware-ul.
Un watchdog rulează continuu.
machine.WDTeste pornit la începutul luimain.pyși alimentat o dată per iterație a buclei principale. Orice blocare mai lungă decât timeout-ul configurat provoacă un reset hardware, iar camera revine la funcționare.Aplicația scrie jurnale într-o destinație recuperabilă. Biblioteca
loggingscrie înregistrări cu un nivel, o marcă temporală și o destinație pe care din teren o puteți recupera de pe cardul SD.print()este doar pentru timpul de dezvoltare – destinația sa implicită este stdout-ul USB, pe care niciun produs livrat nu îl citește.Flash-ul și SD-ul sunt tratate ca putând eșua. Memoria flash internă păstrează înregistrări mici, de dimensiune fixă (configurare, ultima calibrare cunoscută); SD-ul păstrează fișiere voluminoase și variabile (capturi de imagini, fișiere de jurnal); operațiunile pe oricare dintre acestea sunt încadrate în tratarea erorilor, iar aplicația are o soluție de rezervă definită atunci când vreuna nu este disponibilă.
14.2.2. Integrarea aplicației în build¶
Două mecanisme complementare introduc fișiere în imaginea firmware-ului: