Inisialisasi dan penghentian

Pada saat start-up, setiap aplikasi Azure Sphere harus melakukan beberapa inisialisasi:

  • Daftarkan penanganan SIGTERM untuk permintaan penghentian. OS perangkat Azure Sphere mengirimkan sinyal penghentian SIGTERM untuk menunjukkan bahwa aplikasi harus keluar, paling sering ketika pembaruan tertunda, tetapi juga sebagai respons terhadap permintaan daya perangkat. Sebagai bagian dari kode inisialisasinya, aplikasi harus mendaftarkan handler untuk permintaan tersebut. Misalnya:

      #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);
    

    Dalam penanganan penghentian, aplikasi dapat melakukan tugas shutdown apa pun yang diperlukan. Pengatur penghentian harus berupa POSIX async-signal-safe. Secara khusus, mereka tidak boleh berisi panggilan ke Log_Debug(). Contoh program keluar pada kesalahan serta pada penerimaan sinyal penghentian. Oleh karena itu, program ini cukup mengatur Boolean dalam penanganan penghentian lalu melakukan tugas pembersihan dan shutdown setelah keluar dari loop utama.

  • Gagang inisialisasi untuk periferal GPIO.

  • Jika aplikasi menggunakan Azure IoT Hub, sambungkan ke klien IoT dan daftarkan fungsi callback untuk fitur IoT seperti pesan cloud-ke-perangkat, status kembar perangkat, dan panggilan metode langsung.

Saat penghentian, aplikasi harus menutup periferal, menghancurkan gagang, dan memori bebas yang dialokasikan. Aplikasi hanya memiliki dua detik untuk keluar setelah penerimaan sinyal SIGTERM; jika aplikasi belum keluar oleh maka Azure Sphere OS mengirimkan sinyal SIGKILL yang segera menghentikan aplikasi. Sinyal SIGKILL harus selalu dihindari. Jika aplikasi secara rutin melakukan tindakan yang mungkin membutuhkan waktu lebih dari dua detik untuk diselesaikan, pertimbangkan untuk menambahkan pengulangan pembaruan yang ditunda ke aplikasi. Aplikasi yang menggunakan fitur Powerdown harus melakukan pembersihan apa pun yang diperlukan sebelum memanggil API power-down.