Partilhar via


Inicialização e terminação

No arranque, todas as aplicações do Azure Sphere devem efetuar algumas inicializações:

  • Registe um processador SIGTERM para pedidos de terminação. O SO do dispositivo do Azure Sphere envia o sinal de terminação SIGTERM para indicar que a aplicação tem de sair, mais frequentemente quando uma atualização está pendente, mas também em resposta a um pedido de desligar o dispositivo. Como parte do código de inicialização, a aplicação deve registar um processador para esses pedidos. 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 processador de terminações, a aplicação pode executar as tarefas de encerramento necessárias. Os processadores de terminação têm de ser POSIX async-signal-safe. Em particular, não podem conter chamadas para Log_Debug(). Os programas de exemplo saem por erro, bem como ao receber o sinal de terminação. Por conseguinte, estes programas simplesmente definem um Booleano no processador de terminações e, em seguida, executam tarefas de limpeza e encerramento após sair do ciclo principal.

  • Inicializar alças para periféricos GPIO.

  • Se a aplicação utilizar Hub IoT do Azure, ligue-se ao cliente IoT e registe as funções de chamada de retorno para funcionalidades de IoT, tais como mensagens da cloud para o dispositivo, o estado do dispositivo duplo e as chamadas de método direto.

Ao terminar, a aplicação deve fechar periféricos, destruir identificadores e libertar memória alocada. A aplicação tem apenas dois segundos para sair após a receção do sinal SIGTERM; Se a aplicação ainda não tiver saído, o SO do Azure Sphere envia um sinal SIGKILL que termina imediatamente a aplicação. O sinal SIGKILL deve ser sempre evitado. Se a aplicação executar rotineiramente ações que podem demorar mais de dois segundos a ser concluídas, considere adicionar um ciclo de atualização diferido à aplicação. As aplicações que utilizam a funcionalidade Powerdown devem efetuar qualquer limpeza necessária antes de chamar as APIs de desligar.