Partilhar via


Gerencie o tempo do sistema e o RTC em aplicativos de alto nível

Importante

Esta é a documentação do Azure Sphere (Legado). O Azure Sphere (Legado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (Integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).

O RTC (relógio em tempo real) é usado para manter o tempo em um dispositivo Azure Sphere quando o dispositivo perde energia e não tem acesso a uma conexão de rede após a reinicialização do dispositivo. Isso permite que o dispositivo mantenha o tempo durante uma perda de energia, mesmo que ele não tenha acesso a um servidor NTP.

Se você definir o tempo do sistema, ele não persiste quando o dispositivo perde energia. Para persistir o tempo durante a perda de energia, você deve chamar a função Applibs clock_systohc. Quando clock_systohc é chamado, a hora do sistema é enviada para o RTC.

Requisitos do RTC

Os aplicativos que usam o RTC devem incluir os arquivos de cabeçalho apropriados e adicionar configurações de RTC ao manifesto do aplicativo.

Arquivos de cabeçalho

Inclua o cabeçalho rtc no seu projeto:

 #include <applibs\rtc.h>

Configurações de manifesto do aplicativo

Para usar o RTC e as APIs de relógio padrão, você deve adicionar o recurso do SystemTime aplicativo ao manifesto do aplicativo e, em seguida, definir o valor como true. O manifesto do aplicativo Azure Sphere tem mais detalhes sobre o manifesto do aplicativo.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3_RTC",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "HardwareAddressConfig": true,
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": true,
    "TimeSyncConfig": true
  }
}

Obter o tempo do sistema

Para obter o tempo do sistema, chame a função padrão clock_gettime .

Definir a hora do sistema

Para definir a hora do sistema, chame a função padrão clock_settime .

Sincronizar a hora do sistema com o RTC

Quando a hora do sistema é definida, ela não persiste quando o dispositivo perde energia. Para persistir o tempo durante a perda de energia, chame a função Applibs clock_systohc . Quando clock_systohc é chamado o tempo do sistema é empurrado para o RTC.

Configurar o serviço de cliente NTP

O serviço de cliente NTP está habilitado por padrão. Se você definir a hora do sistema enquanto o serviço de cliente NTP estiver habilitado, ele substituirá a hora UTC quando o dispositivo tiver conectividade com a Internet. Você pode desativar o serviço de cliente NTP, no entanto, isso pode fazer com que as atualizações de nuvem no dispositivo falhem se a diferença entre a hora do sistema e a hora do servidor NTP for muito grande.

Definir o fuso horário

A hora do sistema e a hora RTC são armazenadas em GMT/UTC. Você pode alterar o fuso horário usado pelo seu aplicativo chamando a setenv função para atualizar a variável de ambiente TZ e, em seguida, chamando a tzset função.

O projeto SetTimeFromLocation mostra como usar a pesquisa reversa de IP para obter informações de localização, obter o tempo para o local e definir o tempo do dispositivo. Este projeto faz parte da Galeria do Azure Sphere, uma coleção de scripts, utilitários e funções não mantidos.

O SO Azure Sphere suporta alguns, mas não todos, formatos possíveis para a variável de ambiente TZ:

  • Você pode definir o fuso horário atual com ou sem o horário de verão (DST). Exemplos: "EST+5", "EST+5EDT". Este valor é positivo se o fuso horário local estiver a oeste do Meridiano Prime e negativo se for leste.
  • Não é possível especificar a data e a hora em que o horário de verão deve entrar em vigor.
  • Não é possível especificar um arquivo/banco de dados de fuso horário.

Para manter as configurações de fuso horário durante uma perda de energia, você pode usar o armazenamento mutável para armazenar o fuso horário no armazenamento persistente e, em seguida, recuperar a configuração quando o dispositivo for reinicializado.

Especificando um servidor NTP

O serviço de cliente NTP pode ser configurado para obter tempo de várias fontes. A fonte de tempo padrão é prod.time.sphere.azure.net, conforme observado nos requisitos de rede do sistema operacional Azure Sphere.

O cliente NTP tenta sincronizar o tempo a cada 15 segundos até que uma sincronização bem-sucedida tenha ocorrido. Depois de sincronizar o tempo com sucesso, ele tenta sincronizar novamente o tempo uma vez a cada 24 horas. Quando o Azure Sphere executa a sincronização de tempo, ele primeiro usa uma porta de origem de cliente UDP aleatória entre 32678-61000. Se essa porta falhar, o Azure Sphere tentará usar a porta 124 como a porta de origem do cliente UDP.

Você pode especificar que o sistema obtenha o tempo de um servidor DHCP ou pode especificar a fonte de tempo no aplicativo via Networking_TimeSync_EnableCustomNTP ou Networking_TimeSync_EnableDefaultNTP.

Se configurado para usar DHCP para fontes de servidor de tempo, o Azure Sphere processará a opção DHCP 042 e o cliente NTP processará apenas as duas primeiras entradas enviadas na opção DHCP, que devem ser listadas em ordem de preferência. Estes serão considerados como um servidor primário e um servidor secundário.

Você também pode configurar um servidor de tempo via Networking_TimeSync_EnableCustomNTP se quiser especificar o servidor de tempo primário e secundário através do aplicativo. O comprimento máximo para cada FQDN (nome de domínio totalmente qualificado) do servidor é de 255 caracteres.

Fallback

  • Se o cliente NTP estiver configurado para obter os servidores de tempo via DHCP ou API, um parâmetro adicional será necessário para especificar o comportamento de fallback.

  • O cliente tentará entrar em contato com o servidor de horário primário primeiro. Se o cliente não conseguir obter uma resposta válida do servidor de tempo, ele tentará o servidor de hora secundário (se especificado).

  • Se um servidor de tempo secundário for especificado e falhar, ou se a opção de voltar aos padrões do sistema operacional falhar Networking_NtpOption_FallbackServerEnabled , o sistema entrará em contato com a fonte de tempo padrão do sistema operacional prod.time.sphere.azure.net.

    • No próximo intervalo de sincronização de tempo de 24 horas, o SO voltará e tentará consultar o servidor de hora principal.
  • Se você especificou Networking_NtpOption_FallbackServerDisabled, o sistema operacional continuará a consultar o servidor primário e secundário a cada 15 segundos até que ele tenha sido sincronizado com êxito com um dos servidores de tempo.

Dispositivos multihomed

As configurações do servidor de tempo são uma configuração global, não uma configuração por interface. Se o dispositivo Azure Sphere for multihomed e ambas as interfaces obtiverem informações do servidor NTP via DHCP, o conjunto de opções NTP DHCP processado mais recentemente vencerá.

Amostra de tempo do sistema

O exemplo de Tempo do Sistema mostra como gerenciar o tempo do sistema e usar o RTC de hardware. O aplicativo de exemplo define a hora do sistema e, em seguida, usa a clock_systohc função para sincronizar a hora do sistema com o RTC.

O projeto SetTimeFromLocation mostra como usar a pesquisa reversa de IP para obter informações de localização, obter o tempo para o local e definir o tempo do dispositivo. Este projeto faz parte da Galeria do Azure Sphere, uma coleção de scripts, utilitários e funções não mantidos.

Exemplo de NTP personalizado

O exemplo de NTP personalizado mostra como configurar o serviço de cliente NTP para obter tempo de várias fontes.