Инициализация и завершение

При запуске каждое приложение Azure Sphere должно выполнять некоторую инициализацию:

  • Зарегистрируйте обработчик SIGTERM для запросов на завершение. ОС устройства Azure Sphere отправляет сигнал завершения 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. В частности, они не должны содержать вызовы .Log_Debug() Примеры программ выходят из-за ошибки, а также при получении сигнала о завершении. Таким образом, эти программы просто задают логическое значение в обработчике завершения, а затем выполняют задачи очистки и завершения работы после выхода из цикла main.

  • Инициализация дескрипторов для периферийных устройств GPIO.

  • Если приложение использует Центр Интернета вещей Azure, подключитесь к клиенту Интернета вещей и зарегистрируйте функции обратного вызова для таких функций Интернета вещей, как сообщения из облака на устройство, состояние двойника устройства и прямые вызовы методов.

После завершения работы приложение должно закрыть периферийные устройства, уничтожить дескриптор и освободить выделенную память. После получения сигнала SIGTERM у приложения есть всего две секунды для выхода; Если приложение не завершилось, ОС Azure Sphere отправляет сигнал SIGKILL, который немедленно завершает работу приложения. Всегда следует избегать сигнала SIGKILL. Если приложение регулярно выполняет действия, которые могут занять больше двух секунд, рассмотрите возможность добавления в приложение отложенного цикла обновления . Приложения, использующие функцию Powerdown , должны выполнить необходимую очистку перед вызовом API выключения питания.