開發生產就緒應用程式的建議
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
當您開發 Azure Sphere 裝置的應用程式時,有數件事需要考慮,以確保應用程式已準備好生產環境。 本主題包含一份最佳做法檢查清單,以驗證您的應用程式已準備好進行試驗或生產部署。 確認這些專案已完成可減少您在生產環境中遇到的問題數目,並讓您更輕鬆地診斷所發生的任何問題。
當您開發 Azure Sphere 應用程式時,請決定是否要在 高階 (HL)、 即時 (RT) 核心或兩者混合執行。 高階應用程式會在 Azure Sphere OS 上執行容器化,而即時可用的應用程式 (RTApps) 會在裸機上執行,或在即時核心上使用即時操作系統 (RTOS) 執行。
此處提供的建議旨在協助您提高生產就緒應用程式中的質量和生產力。 下列檢查清單提供這兩種應用程式類型的簡潔設計建議清單,以及建議的程式代碼基本概念和解決方案設計考慮,包括詳細討論每個點的主題連結。 這些建議衍生自我們與客戶的合作關係,包括現場分析、程式代碼檢閱,以及支援實際解決方案和裝置設計中生產部署應用程式的互動。
常見問題
- 請確定生產環境就緒的應用程式不會使用 Beta 工具組。
- 以 API 集合為目標時,請使用最新的 CMake 和 Azure Sphere 工具。
- 若要確保完整的程式代碼優化和大小,請考慮先在發行模式中編譯最終映像套件,再將應用程式部署至生產環境。 部署發行套件之前,請務必先建置並測試發行套件。
- 執行完整組建時,請使用零警告原則,以確保刻意處理編譯程式警告。
- 設定一致的 CI/CD 管線,並使用適當的分支策略。
記憶體相關問題
- 可能的話,請定義所有常見的固定字串,
global const char*
而不是硬式編碼,以便當做數據指標使用。 - 如果全域數據結構相當小,請考慮為陣列成員提供固定長度,而不是使用指標來動態配置記憶體。
- 盡可能避免動態記憶體配置。
- 對於傳回記憶體緩衝區指標的函式,請考慮轉換成函式,以傳回參考的緩衝區指標及其相關大小給呼叫端。
- 可能的話,請定義所有常見的固定字串,
動態容器和緩衝區
- 請考慮針對清單和向量等容器使用累加配置方法。
一般基本概念
- 在結束或錯誤時正確初始化並終結所有處理程式。
- 一律使用結束代碼。
- 如果應用程式偵測到它處於無法復原的狀態,而且需要重新啟動,請確定它一律會以「清除」應用程式結束來處理,而不是冒著死結狀態的風險。
- 實作錯誤處理和記錄。 如需詳細資訊,請參閱 錯誤處理和記錄。
- 使用系統定時器作為監視程式來偵測應用程式是否處於無法復原的狀態或停滯狀態(例如死結、耗盡的記憶體,或未透過實作的邏輯復原的連線能力),並影響適當的復原。 如需詳細資訊,請參閱 使用系統定時器作為監督程式。
處理並行
- 盡可能使用 EventLoop。
- 尋找並行工作的效率。
- 評估何時只使用線程和範圍至特定工作。 如需何時使用線程的詳細資訊,請參閱 處理並行。
連線能力監視
- 根據定期檢查因特網聯機狀態的健全狀態機器,實作適當的聯機健康情況檢查工作。
- 針對需要電源管理的解決方案,在傳送數據之後關閉 Azure Sphere 晶片電源、追蹤總上行時間,並設定關機定時器。
- cURL 最近已更新回呼行為和最佳做法。 雖然 Azure Sphere 已努力確保舊版的 cURL 行為如預期般運作,但建議在使用 curl_multi 時遵循最新的安全性和可靠性指引,因為使用遞歸回呼可能會導致非預期的當機、聯機中斷和潛在的安全性弱點。 如果 TimerCallback 引發逾時為 0 毫秒,請將它視為 1 毫秒的逾時,以避免遞歸回呼。 請務必在呼叫 curl_multi_add_handle 之後,至少明確地呼叫curl_multi_socket_action一次。
記憶體管理和使用方式
- 使用 Azure Sphere OS API 追蹤應用程式記憶體使用量,並確保應用程式會適當地回應非預期的記憶體使用量。
- 啟用 MT3620 監視程式定時器,以偵測死結並實作適當的復原邏輯。
- 為混合式 HL 核心和 RT 核心應用程式實作核心間通訊。
線上需求和疑難解答
- 請確定符合所有網路必要條件。 如需詳細資訊,請參閱 連線需求和疑難解答。
- 使用
OSNetworkRequirementCheck-HLApp
和OSNetworkRequirementChecker-PC
針對連線問題進行疑難解答。
建議內容
如需將IoT解決方案移至生產環境時要考慮的其他專案,請參閱 將IoT解決方案從測試移至生產環境。