Inicjowanie i wypowiedzenie
Podczas uruchamiania każda aplikacja Azure Sphere powinna przeprowadzić pewne inicjowanie:
Zarejestruj program obsługi SIGTERM dla żądań zakończenia. System operacyjny urządzenia Azure Sphere wysyła sygnał zakończenia SIGTERM, aby wskazać, że aplikacja musi zakończyć działanie, najczęściej w przypadku oczekiwania na aktualizację, ale także w odpowiedzi na żądanie wyłączenia zasilania urządzenia. W ramach kodu inicjowania aplikacja powinna zarejestrować obsługi dla takich żądań. Na przykład:
#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);
W programie obsługi zakończenia aplikacja może wykonywać wszelkie wymagane zadania zamykania. Obsługa zakończenia musi być posix async-signal-safe. W szczególności nie mogą one zawierać połączeń z
Log_Debug()
. Przykładowe programy zamykają się po błędzie, a także po otrzymaniu sygnału zakończenia. W związku z tym programy te po prostu ustawić wartość logiczną w programie obsługi zakończenia, a następnie wykonać zadania oczyszczania i zamykania po wyjściu z pętli głównej.Inicjowanie uchwytów dla urządzeń peryferyjnych GPIO.
Jeśli aplikacja korzysta z Azure IoT Hub, połącz się z klientem IoT i zarejestruj funkcje wywołania zwrotnego dla funkcji IoT, takich jak komunikaty z chmury na urządzenie, stan urządzenia z dwoma urządzeniami i bezpośrednie wywołania metod.
Po zakończeniu aplikacja powinna zamknąć urządzenia peryferyjne, zniszczyć uchwyty i bezpłatną przydzieloną pamięć. Aplikacja ma tylko dwie sekundy, aby wyjść po otrzymaniu sygnału SIGTERM; jeśli do tego czasu aplikacja nie została zakończona, system operacyjny Azure Sphere wysyła sygnał SIGKILL, który natychmiast zamyka aplikację. Należy zawsze unikać sygnału SIGKILL. Jeśli aplikacja rutynowo wykonuje akcje, które mogą trwać dłużej niż dwie sekundy, rozważ dodanie odroczonej pętli aktualizacji do aplikacji. Aplikacje korzystające z funkcji Powerdown powinny wykonać wszelkie niezbędne oczyszczanie przed wywołaniami interfejsów API zasilania.