運用対応アプリケーションの開発に関する推奨事項
Azure Sphere デバイス用のアプリケーションを開発する際に、アプリケーションが運用環境で準備されていることを確認することを考慮する必要があります。 このトピックには、アプリケーションがパイロットまたは運用環境のデプロイの準備ができているかどうかを確認するためのベスト プラクティスのチェックリストが含まれています。 これらの項目が完了していることを確認すると、運用環境で発生する問題の数を減らし、発生した問題を簡単に診断できます。
Azure Sphere アプリケーションを開発するときに、 高レベル (HL)、 リアルタイム (RT) コア、または両方のハイブリッドで実行するかどうかを決定します。 高レベルのアプリケーションは Azure Sphere OS でコンテナー化されて実行され、リアルタイム対応アプリケーション (RTApps) はベア メタルまたはリアルタイム コア上のリアルタイム オペレーティング システム (RTOS) で実行されます。
ここで提供される推奨事項は、運用環境に対応したアプリケーションで品質と生産性を向上させるための推奨事項です。 次のチェックリストでは、両方のアプリケーションの種類に関する設計提案の簡潔な一覧と、推奨されるコーディングの基礎とソリューション設計に関する考慮事項 (各ポイントについて詳しく説明するトピックへのリンクなど) を示します。 これらの提案は、現場分析、コード レビュー、実際のソリューションやデバイス設計での運用展開アプリケーションの相互作用のサポートなど、お客様とのパートナーシップから派生しています。
一般的な問題
- 運用環境に対応したアプリケーションでベータ ツールセットが使用されないようにします。
- 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の呼び出しに続いて、少なくとも 1 回は明示的に curl_multi_socket_action を呼び出してください。
メモリの管理と使用状況
- Azure Sphere OS API を使用してアプリケーション のメモリ使用量を追跡し、アプリケーションが予期しないメモリの使用に適切に反応することを確認します。
- MT3620 ウォッチドッグ タイマーを有効にしてデッドロックを検出し、適切な復旧ロジックを実装します。
- ハイブリッド HL コア アプリケーションと RT コア アプリケーション用のコア間通信を実装します。
接続要件とトラブルシューティング
- すべてのネットワークの前提条件が満たされていることを確認します。 詳細については、「 接続の要件とトラブルシューティング」を参照してください。
- と を使用して接続の問題のトラブルシューティングを行
OSNetworkRequirementCheck-HLApp
OSNetworkRequirementChecker-PC
います。
推奨されるコンテンツ
IoT ソリューションを運用環境に移動する際に考慮すべきその他の項目については、「 IoT ソリューションをテストから運用環境に移動する」を参照してください。