14.2. Uygulamanın sevki

Tezgahta çalışan bir betik ile sevk edilen bir ürün aynı şey değildir. Sahaya giren bir kamera, ürün kurulu kaldığı sürece – aylarca, yıllarca – konsolda bir operatör olmadan, bağlı bir IDE olmadan ve bir şeyler bozulduğunda yakında bir Python uzmanı olmadan kendi başına çalışmak zorundadır. Bu bölümdeki sayfalar, hedef masaüstü demosu yerine sevk edilen ürün olduğunda uygulamada nelerin değiştiğini ele alır.

14.2.1. Uçuş öncesi kontrol listesi

Bir kamera tezgahtan ayrılmadan önce, doğru olması gereken kısa şeyler listesi şudur:

  • Uygulama kodu dosya sisteminde değil, yapı içindedir. Dondurulmuş modüller ve bir ROMFS imajı, kodu ve varlıkları kapsar. Flash ve SD kart depolaması yalnızca çalışma zamanı durumu ve günlük dosyaları içindir. Son kullanıcı, yeniden flash’a yazmadan uygulamayı düzenleyemez, silemez veya değiştiremez.

  • Bir bekçi köpeği (watchdog) sürekli çalışır. machine.WDT, main.py‘nin en üstünde başlatılır ve ana döngünün her yinelemesinde bir kez beslenir. Yapılandırılan zaman aşımından daha uzun süren herhangi bir takılma, donanımsal bir sıfırlamaya neden olur ve kamera tekrar açılır.

  • Uygulama, kurtarılabilir bir hedefe günlük yazar. logging kütüphanesi, kayıtları bir seviye, bir zaman damgası ve sahanın SD karttan kurtarabileceği bir hedef ile yazar. print() yalnızca geliştirme zamanına yöneliktir – varsayılan hedefi, sevk edilen hiçbir ürünün okumadığı USB stdout’tur.

  • Flash ve SD, başarısız olabilir olarak ele alınır. Dahili flash bellek küçük sabit boyutlu kayıtlar tutar (yapılandırma, son bilinen kalibrasyon); SD, hacimli değişken dosyalar tutar (görüntü yakalamaları, günlük dosyaları); her ikisindeki işlemler hata işleme ile sarmalanır ve uygulamanın, her ikisi de kullanılamadığında tanımlı bir geri dönüşü vardır.

14.2.2. Uygulamayı yapıya gömme

İki tamamlayıcı mekanizma, dosyaları aygıt yazılımı imajına koyar: