14.2. شحن التطبيق

إنّ برنامجًا نصيًا يعمل على طاولة العمل ومنتَجًا مشحونًا ليسا الشيء نفسه. فالكاميرا التي تذهب إلى الميدان عليها أن تعمل بمفردها طوال مدة تثبيت المنتَج -- أشهرًا، سنوات -- دون مشغّل عند وحدة التحكم، ودون IDE متصل، ودون خبير Python قريب عندما يتوقف شيء عن العمل. تتناول الصفحات في هذا القسم ما الذي يتغير في التطبيق عندما يكون الهدف منتَجًا مشحونًا بدلًا من عرض على المكتب.

14.2.1. قائمة تحقق قبل الإطلاق

قبل أن تغادر الكاميرا طاولة العمل، هذه هي القائمة المختصرة بالأمور التي ينبغي أن تكون صحيحة:

  • شيفرة التطبيق موجودة في البناء، لا على نظام الملفات. تغطّي الوحدات المجمّدة وصورة ROMFS الشيفرة والأصول. أما تخزين الفلاش وبطاقة SD فمخصّص لحالة وقت التشغيل وملفات السجلات فقط. ولا يستطيع المستخدم النهائي تحرير التطبيق أو حذفه أو استبداله دون إعادة الوميض.

  • يعمل مراقب (watchdog) باستمرار. يُبدأ machine.WDT في أعلى main.py ويُغذّى مرة واحدة في كل تكرار للحلقة الرئيسية. وأي تعليق أطول من المهلة المضبوطة يسبّب إعادة ضبط للعتاد وتعود الكاميرا إلى العمل.

  • يسجّل التطبيق إلى وجهة قابلة للاسترجاع. تكتب مكتبة logging السجلات مع مستوى، وطابع زمني، ووجهة يمكن استرجاعها ميدانيًا من بطاقة SD. أما print() فهي لوقت التطوير فقط -- إذ إن وجهتها الافتراضية هي USB stdout، التي لا يقرؤها أي منتَج مشحون.

  • يُعامَل الفلاش وSD على أنهما قابلان للفشل. تحتفظ الفلاش الداخلية بسجلات صغيرة ثابتة الحجم (الإعدادات، آخر معايرة معروفة)؛ وتحتفظ SD بملفات ضخمة متغيرة (التقاطات الصور، ملفات السجلات)؛ وتُغلّف العمليات على أيٍّ منهما بمعالجة الأخطاء، ولدى التطبيق احتياطي محدّد عندما يكون أيّهما غير متاح.

14.2.2. دمج التطبيق في البناء

تضع آليتان متكاملتان الملفات في صورة البرنامج الثابت: