Gerenciar a hora do sistema e o RTC em aplicativos de alto nível
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) 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 é usado para manter a hora em um dispositivo do Azure Sphere que ficou sem energia e não teve acesso a uma conexão de rede após a reinicialização. Isso permite que o dispositivo mantenha-se ativo durante uma queda de energia, mesmo se ele não tiver acesso a um servidor NTP.
Quando a hora do sistema é definida, ela não persiste quando o dispositivo fica sem energia. Para persistir a hora durante a perda de energia, chame a função Applibs clock_systohc. Quando clock_systohc é chamada, a hora do sistema é enviada ao RTC.
Requisitos de RTC
Os aplicativos que usam o RTC precisam habilitar os arquivos de cabeçalho apropriados e adicionar as configurações de RTC ao manifesto do aplicativo.
Arquivos de cabeçalho
Inclua o cabeçalho rtc em seu projeto:
#include <applibs\rtc.h>
Configurações do manifesto do aplicativo
Para usar RTC e APIs de relógio padrão, adicione a funcionalidade do aplicativo SystemTime
ao manifesto do aplicativo e defina o valor como true
. O manifesto do aplicativo do 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 a hora do sistema
Para obter a hora 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
A hora do sistema, depois que for definida, não será mantida quando o dispositivo ficar sem energia. Para persistir o tempo durante a perda de energia, chame a função Applibs clock_systohc . Quando clock_systohc é chamada, a hora do sistema é enviada ao RTC.
Configurar o serviço de cliente NTP
O serviço do 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 conexão com a Internet. Você pode desabilitar o serviço de cliente NTP; no entanto, isso poderá causar a falha das atualizações via nuvem no dispositivo 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 por seu aplicativo chamando a função setenv
para atualizar a variável de ambiente TZ e chamando a função tzset
.
O projeto SetTimeFromLocation mostra como usar a pesquisa reversa de IP para obter informações de localização, obter tempo para localização e definir a hora do dispositivo. Esse projeto faz parte da Galeria do Azure Sphere, uma coleção de scripts, utilitários e funções não mantidos.
O SO do Azure Sphere oferece suporte a alguns, mas não a todos, possíveis formatos da variável de ambiente TZ:
- Você pode definir o fuso horário atual com ou sem horário de verão (DST). Exemplos: "EST+5", "EST+5EDT". Esse valor é positivo se o fuso horário local estiver a oeste do Meridiano Principal, e negativo se estiver a 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 queda 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 do Azure Sphere.
O cliente NTP tenta sincronizar o tempo a cada 15 segundos até que ocorra uma sincronização bem-sucedida. Depois de sincronizar o tempo com êxito, 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 do cliente UDP aleatória entre 32678 e 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 tempo de um servidor DHCP ou pode especificar a fonte de tempo no aplicativo por meio de Networking_TimeSync_EnableCustomNTP ou Networking_TimeSync_EnableDefaultNTP.
Se configurado para usar DHCP para fontes de servidor de horário, 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. Eles serão considerados como um servidor primário e um servidor secundário.
Você também pode configurar um servidor de horário por meio de Networking_TimeSync_EnableCustomNTP se quiser especificar o servidor de horário primário e secundário por meio do aplicativo. O comprimento máximo para cada FQDN (nome de domínio totalmente qualificado) do servidor de horário é de 255 caracteres.
Fallback
Se o cliente NTP estiver configurado para obter os servidores de horário 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 horário, ele tentará o servidor de horário secundário (se especificado).
Se um servidor de horário secundário for especificado e falhar, ou se a opção de voltar para os padrões do sistema operacional por meio
Networking_NtpOption_FallbackServerEnabled
falhar, 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 sistema operacional voltará e tentará consultar o servidor de horário primário.
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 seja sincronizado com êxito com um dos servidores de horário.
Dispositivos multihomed
As configurações do servidor de horário são uma configuração global, não uma configuração por interface. Se o dispositivo do Azure Sphere for multihomed e ambas as interfaces obtiverem informações do servidor NTP por meio do DHCP, o conjunto de opções NTP DHCP processado mais recentemente vencerá.
Exemplo de Hora do Sistema
O exemplo de Hora do Sistema mostra como gerenciar a hora do sistema e usar o hardware RTC. O aplicativo de exemplo define a hora do sistema e 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 tempo para localização e definir a hora do dispositivo. Esse 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.