Compartilhar via


Inicialização e término

Na inicialização, todos os aplicativos do Azure Sphere devem executar alguma inicialização:

  • Registre um manipulador SIGTERM para solicitações de terminação. O sistema operacional de dispositivo do Azure Sphere envia o sinal de término do SIGTERM para indicar que esse aplicativo deve sair, com mais frequência quando uma atualização está pendente, mas também em resposta a uma solicitação de desligamento do dispositivo. Como parte de seu código de inicialização, o aplicativo deve registrar um manipulador para essas solicitações. Por exemplo:

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

    No manipulador de terminação, o aplicativo pode executar todas as tarefas de desligamento necessárias. Os manipuladores de terminação devem ser posiX assíncrono-sinal-seguro. Em particular, eles não devem conter chamadas para Log_Debug(). Os programas de exemplo saem por erro, bem como no recebimento do sinal de terminação. Portanto, esses programas simplesmente definem um booliano no manipulador de terminação e, em seguida, executam tarefas de limpeza e desligamento depois de sair do loop de main.

  • Inicialize identificadores para periféricos GPIO.

  • Se o aplicativo usar Hub IoT do Azure, conecte-se ao cliente IoT e registre funções de retorno de chamada para recursos IoT, como mensagens de nuvem para dispositivo, status de dispositivo gêmeo e chamadas diretas de método.

No término, o aplicativo deve fechar periféricos, destruir identificadores e memória alocada gratuitamente. O aplicativo tem apenas dois segundos para sair após o recebimento do sinal SIGTERM; se o aplicativo não tiver saído até então, o sistema operacional do Azure Sphere enviará um sinal SIGKILL que encerra imediatamente o aplicativo. O sinal SIGKILL deve sempre ser evitado. Se o aplicativo executar ações rotineiramente que podem levar mais de dois segundos para serem concluídas, considere adicionar um loop de atualização adiado ao aplicativo. Os aplicativos que usam o recurso do Powerdown devem fazer qualquer limpeza necessária antes de chamar as APIs de desligamento.