14.2. משלוח היישום¶
סקריפט עובד על שולחן העבודה ומוצר שנשלח אינם אותו הדבר. מצלמה היוצאת לשטח חייבת לרוץ בכוחות עצמה כל עוד המוצר מותקן – חודשים, שנים – ללא מפעיל בקונסולה, ללא IDE מחובר, וללא מומחה Python בקרבת מקום כשמשהו מפסיק לעבוד. העמודים בחלק זה מכסים מה משתנה ביישום כשהמטרה היא מוצר שנשלח במקום הדגמה על שולחן.
14.2.1. רשימת תיוג שלפני המראה¶
לפני שמצלמה עוזבת את שולחן העבודה, זוהי הרשימה הקצרה של דברים שאמורים להיות נכונים:
קוד היישום נמצא ב-build, לא במערכת הקבצים. מודולים מוקפאים ותמונת ROMFS מכסים קוד ונכסים. אחסון הפלאש וכרטיס ה-SD מיועדים למצב ריצה ולקובצי יומן בלבד. המשתמש הקצה אינו יכול לערוך, למחוק או להחליף את היישום ללא צריבה מחדש.
watchdog רץ ברציפות.
machine.WDTמופעל בראשmain.pyומוזן פעם אחת לכל איטרציה של הלולאה הראשית. כל תקיעה ארוכה מהפסק-זמן (timeout) המוגדר גורמת ל-reset של החומרה והמצלמה חוזרת לפעולה.היישום רושם לוג ליעד הניתן לשחזור. ספריית
loggingכותבת רשומות עם רמה, חותמת זמן ויעד שאפשר לשחזר מהשטח מתוך כרטיס ה-SD.print()מיועד לזמן-פיתוח בלבד – יעד ברירת המחדל שלו הוא stdout של USB, שאותו אף מוצר שנשלח אינו קורא.הפלאש וה-SD מטופלים כיכולים-להיכשל. הפלאש הפנימי מחזיק רשומות קטנות בגודל קבוע (קונפיגורציה, כיול אחרון ידוע); ה-SD מחזיק קבצים נפחיים ומשתנים (לכידות תמונה, קובצי יומן); פעולות על כל אחד מהם עטופות בטיפול בשגיאות, וליישום יש חלופה מוגדרת כאשר אחד מהם אינו זמין.
14.2.2. אפיית היישום אל תוך ה-build¶
שני מנגנונים משלימים מכניסים קבצים אל תוך תמונת הקושחה: