14.5. 總結

你已走過一台相機從可運作的工作台指令碼,到出貨產品的整個生命週期:

  • 自訂韌體建置 -- 開發環境、從原始碼建置韌體映像、將它燒錄到相機上,以及當韌體端出問題時,從 VS Code Cortex-Debug 到命令列 gdbrunner 的除錯途徑。

  • 出貨應用程式 -- 透過凍結模組(frozen modules)將應用程式碼燒進韌體、將資產烤進 ROMFS 映像,以及決定執行階段在開機時實際載入哪一份檔案副本的查找順序。由此衍生出的分工是:boot.py 負責 REPL 前的環境設定、main.py 作為應用程式的進入點、凍結的 main.py 作為進入點,而其餘一切則放在 ROMFS。

  • 為量產進行強化 -- 寫入已知路徑的 logging 函式庫、每次主迴圈反覆運算餵食一次的 machine.WDT、能把當機轉化為已記錄事件而非重置的最上層 try / except、隨著應用程式在現場數月間累積記錄而仍能讓檔案操作保持快速的檔案系統衛生措施,以及當產品有此需求時的快閃記憶體讀取保護。

  • 進階素材 -- 供需要向網路服務驗證身分並加密流量的相機所用的 TLS 憑證。

一台出貨的相機具備了以上所有要素:它的應用程式碼從韌體映像執行、它的看門狗每次主迴圈反覆運算被餵食一次、它的日誌落在 SD 卡上一個以日期命名的目錄中,而且當產品有此需求時,它的快閃記憶體已被鎖定以防讀取。

14.5.1. 接下來何去何從

量產是本教學的最後一章。從這裡開始,文件分流為參考資料:

  • 函式庫參考 是按字母排序、用來查「這個呼叫的確切名稱是什麼」的視圖,涵蓋相機所揭露的每個模組 -- machineloggingoscsiimageml 以及其餘各項。

  • 各板快速參考頁面 涵蓋 OpenMV 產品線中每一台相機的細節 -- 接腳配置、可掛載的匯流排、板卡 ID、周邊裝置可用性,以及應用程式必須落在特定零件上時那些重要的細微差異。

  • 感測器參考頁面擴充板參考頁面 涵蓋相機可搭載的各個影像感測器與附加擴充板 -- 應用程式在為某次建置挑選感測器與擴充板時所需的各零件規格、接腳配置與注意事項。

  • MicroPython 語言參考 涵蓋語言本身 -- 與 CPython 的語法差異、當指令碼橫跨兩者時重要的實作細節,以及在 Python 太慢的罕見情況下所需的內嵌組譯器參考。

本教學是從「我手上有一台新相機」走到「我已出貨一項產品」的路徑。從這裡開始,相機只是應用程式所負責之更大型系統中的一個環節,而後續的工作則是應用程式自身的事了。