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: