14.2. Sovelluksen toimittaminen

Toimiva skripti työpöydällä ja toimitettu tuote eivät ole sama asia. Kentälle menevän kameran on pystyttävä toimimaan omillaan niin kauan kuin tuote on asennettuna – kuukausia, vuosia – ilman operaattoria konsolilla, ilman liitettyä IDE:tä ja ilman lähellä olevaa Python-asiantuntijaa, kun jokin lakkaa toimimasta. Tämän osion sivut käsittelevät sitä, mikä muuttuu sovelluksessa, kun tavoitteena on toimitettu tuote eikä työpöytädemo.

14.2.1. Esitarkistuslista

Ennen kuin kamera lähtee työpöydältä, tässä on lyhyt lista asioista, joiden tulisi olla totta:

  • Sovelluskoodi on käännöksessä, ei tiedostojärjestelmässä. Jäädytetyt moduulit ja ROMFS-levykuva kattavat koodin ja resurssit. Flash- ja SD-korttitallennus ovat vain ajonaikaista tilaa ja lokitiedostoja varten. Loppukäyttäjä ei voi muokata, poistaa tai korvata sovellusta ilman uudelleenflashausta.

  • Vahtikoira on jatkuvasti käynnissä. machine.WDT käynnistetään main.py-tiedoston alussa ja ruokitaan kerran kutakin pääsilmukan iteraatiota kohden. Mikä tahansa määritettyä aikakatkaisua pidempi jumiutuminen aiheuttaa laitteistonollauksen, ja kamera palaa toimintaan.

  • Sovellus kirjaa lokia palautettavissa olevaan kohteeseen. logging-kirjasto kirjoittaa tietueita, joissa on taso, aikaleima ja kohde, jonka kenttä voi palauttaa SD-kortilta. print() on vain kehitysaikaista – sen oletuskohde on USB:n stdout, jota mikään toimitettu tuote ei lue.

  • Flashia ja SD-korttia kohdellaan epäonnistumiskykyisinä. Sisäinen flash-muisti pitää sisällään pieniä kiinteäkokoisia tietueita (konfiguraatio, viimeisin tunnettu kalibrointi); SD-kortti pitää sisällään suuria vaihtelevankokoisia tiedostoja (kuvakaappaukset, lokitiedostot); kummankin operaatiot kääritään virheenkäsittelyyn, ja sovelluksella on määritelty varatoiminto, kun kumpikaan ei ole käytettävissä.

14.2.2. Sovelluksen leipominen käännökseen

Kaksi toisiaan täydentävää mekanismia laittavat tiedostot laiteohjelmiston levykuvaan: