初期化と終了
起動時に、すべての Azure Sphere アプリケーションでいくつかの初期化を実行する必要があります。
終了要求の SIGTERM ハンドラーを登録します。 Azure Sphere デバイス OS は SIGTERM 終了シグナルを送信して、更新が保留中の場合にアプリケーションを終了する必要があることを示しますが、デバイスの電源停止要求にも応答します。 初期化コードの一部として、アプリケーションはこのような要求のハンドラーを登録する必要があります。 例えば:
#include <signal.h> ... // Register a SIGTERM handler for termination requests struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); action.sa_handler = TerminationHandler; sigaction(SIGTERM, &action, NULL);
終了ハンドラーでは、アプリケーションは必要なシャットダウン タスクを実行できます。 終了ハンドラーは、POSIX async-signal-safe である必要があります。 特に、 への呼び出しを
Log_Debug()
含めてはいけません。 サンプル プログラムは、エラー時と終了信号の受信時に終了します。 したがって、これらのプログラムは終了ハンドラーでブール値を設定し、メイン ループを終了した後にクリーンアップタスクとシャットダウン タスクを実行するだけです。GPIO 周辺機器のハンドルを初期化します。
アプリケーションでAzure IoT Hubを使用する場合は、IoT クライアントに接続し、クラウドからデバイスへのメッセージ、デバイス ツインの状態、ダイレクト メソッド呼び出しなどの IoT 機能のコールバック関数を登録します。
終了時に、アプリケーションは周辺機器を閉じ、ハンドルを破棄し、割り当てられたメモリを解放する必要があります。 アプリケーションは、SIGTERM シグナルの受信時に終了する時間が 2 秒だけです。アプリケーションが終了していない場合、Azure Sphere OS は SIGKILL シグナルを送信し、アプリケーションを直ちに終了します。 SIGKILL シグナルは常に回避する必要があります。 アプリケーションが完了するまでに 2 秒以上かかる可能性のあるアクションを定期的に実行する場合は、アプリケーションに 遅延更新ループ を追加することを検討してください。 Powerdown 機能を使用するアプリケーションは、パワーダウン API を呼び出す前に必要なクリーンアップを行う必要があります。