Condividi tramite


Gestire l'ora di sistema e l'orologio in tempo reale in applicazioni di alto livello

Importante

Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).

L'orologio in tempo reale viene usato per mantenere aggiornata l'ora in un dispositivo Azure Sphere in caso di perdita dell'alimentazione e se il dispositivo non ha accesso a una connessione di rete dopo il riavvio. In questo modo il dispositivo può mantenere aggiornata l'ora durante un'interruzione dell'alimentazione, anche se non ha accesso a un server NTP.

Se si imposta l'ora di sistema, non viene mantenuta in caso di interruzione dell'alimentazione per il dispositivo. Per rendere persistente l'ora in caso di interruzione dell'alimentazione, è necessario chiamare la funzione Applibs clock_systohc. Quando si chiama clock_systohc, viene eseguito il push dell'ora di sistema all'orologio in tempo reale.

Requisiti dell'orologio in tempo reale

Le applicazioni che usano l'orologio in tempo reale devono includere i file di intestazione appropriati e aggiungere le impostazioni dell'orologio in tempo reale al manifesto dell'applicazione.

File di intestazione

Includere l'intestazione rtc nel progetto:

 #include <applibs\rtc.h>

Impostazioni del manifesto dell'applicazione

Per usare le API dell'orologio in tempo reale e dell'orologio standard, è necessario aggiungere la funzionalità SystemTime dell'applicazione al manifesto dell'applicazione e quindi impostare il valore su true. Il manifesto dell'applicazione Azure Sphere contiene altri dettagli sul manifesto dell'applicazione.

{
  "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
  }
}

Ottenere l'ora di sistema

Per ottenere l'ora di sistema, chiamare la funzione clock_gettime standard.

Impostare l'ora di sistema

Per impostare l'ora di sistema, chiamare la funzione clock_settime standard.

Sincronizzare l'ora di sistema con l'orologio in tempo reale

Quando si imposta l'ora di sistema, non viene mantenuta in caso di interruzione dell'alimentazione per il dispositivo. Per rendere persistente il tempo durante la perdita di energia, chiamare la funzione Applibs clock_systohc . Quando si chiama clock_systohc, viene eseguito il push dell'ora di sistema all'orologio in tempo reale.

Configurare il servizio client NTP

Il servizio client NTP è abilitato per impostazione predefinita. Se si imposta l'ora di sistema mentre il servizio client NTP è abilitato, l'ora UTC verrà sovrascritta quando il dispositivo è connesso a Internet. Il servizio client NTP può essere disabilitato, tuttavia ciò può causare un errore degli aggiornamenti cloud nel dispositivo se la differenza tra l'ora di sistema e l'ora del server NTP è eccessiva.

Impostare il fuso orario

L'ora di sistema e l'ora dell'orologio in tempo reale sono archiviate nel formato GMT/UTC. È possibile modificare il fuso orario usato dall'applicazione chiamando la funzione setenv per aggiornare la variabile di ambiente TZ e quindi chiamando la funzione tzset.

Il progetto SetTimeFromLocation mostra come usare la ricerca IP inversa per ottenere informazioni sulla posizione, quindi ottenere l'ora per la posizione e impostare l'ora del dispositivo. Questo progetto fa parte della raccolta di Azure Sphere, una raccolta di script, utilità e funzioni non mantenuti.

Il sistema operativo di Azure Sphere supporta alcuni, ma non tutti i possibili formati per la variabile di ambiente TZ:

  • Il fuso orario corrente può essere impostato con o senza ora legale. Esempi: "EST+5", "EST+5EDT". Il valore è positivo se il fuso orario locale è a ovest del meridiano zero e negativo se è a est.
  • Non è possibile specificare la data e l'ora in cui deve venire applicata l'ora EST.
  • Non è possibile specificare un file o un database del fuso orario.

Per mantenere le impostazioni del fuso orario durante una perdita di alimentazione, è possibile usare l'archiviazione modificabile per archiviare il fuso orario nell'archiviazione permanente e quindi richiamare l'impostazione al riavvio del dispositivo.

Specifica di un server NTP

Il servizio client NTP può essere configurato per ottenere tempo da più origini. L'origine ora predefinita è prod.time.sphere.azure.net, come indicato nei requisiti di rete del sistema operativo Azure Sphere.

Il client NTP tenta di sincronizzare l'ora ogni 15 secondi fino a quando non si è verificata una sincronizzazione riuscita. Dopo aver sincronizzato correttamente il tempo, tenta di sincronizzare nuovamente l'ora una volta ogni 24 ore. Quando Azure Sphere esegue la sincronizzazione dell'ora, usa prima una porta di origine client UDP casuale tra 32678-61000. Se questa porta ha esito negativo, Azure Sphere tenta di usare la porta 124 come porta di origine del client UDP.

È possibile specificare che il sistema ottiene l'ora da un server DHCP oppure è possibile specificare l'origine dell'ora nell'applicazione tramite Networking_TimeSync_EnableCustomNTP o Networking_TimeSync_EnableDefaultNTP.

Se configurato per l'uso di DHCP per le origini del server temporale, Azure Sphere elabora l'opzione DHCP 042 e il client NTP elabora solo le prime due voci inviate nell'opzione DHCP, che deve essere elencata in ordine di preferenza. Questi verranno considerati come server primario e server secondario.

È anche possibile configurare un server ora tramite Networking_TimeSync_EnableCustomNTP se si desidera specificare il server ora primario e secondario tramite l'applicazione. La lunghezza massima per ogni nome di dominio completo (FQDN) del server è di 255 caratteri.

Fallback

  • Se il client NTP è configurato per ottenere i server time tramite DHCP o API, è necessario un parametro aggiuntivo per specificare il comportamento di fallback.

  • Il client tenterà di contattare prima il server ora primaria. Se il client non riesce a ottenere una risposta valida del server temporale, tenterà il server ora secondario (se specificato).

  • Se viene specificato un server ora secondario e ha esito negativo o se l'opzione per eseguire il fallback alle impostazioni predefinite del sistema operativo tramite Networking_NtpOption_FallbackServerEnabled ha esito negativo, il sistema contatterà l'origine dell'ora del sistema operativo predefinita prod.time.sphere.azure.net.

    • Nell'intervallo di sincronizzazione di 24 ore successivo il sistema operativo tornerà indietro e tenterà di eseguire query sul server ora primario.
  • Se è stato specificato Networking_NtpOption_FallbackServerDisabled, il sistema operativo continuerà a eseguire query sul server primario e secondario ogni 15 secondi finché non viene sincronizzato correttamente con uno dei server time.

Dispositivi multihomed

Le impostazioni del server ora sono un'impostazione globale, non un'impostazione per ogni interfaccia. Se il dispositivo Azure Sphere è multihomed ed entrambe le interfacce ottengono informazioni sul server NTP tramite DHCP, il set di opzioni DHCP elaborato più di recente prevale.

Esempio di ora di sistema

L'esempio di ora di sistema illustra come gestire l'ora di sistema e usare l'orologio in tempo reale dell'hardware. L'applicazione di esempio imposta l'ora di sistema e quindi usa la clock_systohc funzione per sincronizzare l'ora di sistema con l'orologio in tempo reale.

Il progetto SetTimeFromLocation mostra come usare la ricerca IP inversa per ottenere informazioni sulla posizione, quindi ottenere l'ora per la posizione e impostare l'ora del dispositivo. Questo progetto fa parte della raccolta di Azure Sphere, una raccolta di script, utilità e funzioni non mantenuti.

Esempio NTP personalizzato

L'esempio NTP personalizzato illustra come configurare il servizio client NTP per ottenere tempo da più origini.