Share via


Gestire l'ora di sistema e RTC in applicazioni di alto livello

Rtc (orologio in tempo reale) viene usato per mantenere il tempo su un dispositivo Azure Sphere quando il dispositivo perde energia e non ha accesso a una connessione di rete dopo il riavvio del dispositivo. Ciò consente al dispositivo di mantenere il tempo durante una perdita di alimentazione anche se non ha accesso a un server NTP.

Se imposti l'ora di sistema, non viene mantenuta quando il dispositivo perde l'alimentazione. Per mantenere il tempo durante la perdita di alimentazione, è necessario chiamare la funzione Applibs clock_systohc. Quando viene chiamato clock_systohc, l'ora di sistema viene spostata in RTC.

Requisiti RTC

Le applicazioni che usano RTC devono includere i file di intestazione appropriati e aggiungere le impostazioni RTC al manifesto dell'applicazione.

File di intestazione

Includi l'intestazione rtc nel progetto:

 #include <applibs\rtc.h>

Impostazioni del manifesto dell'applicazione

Per usare le API RTC e standard dell'orologio, è necessario aggiungere la funzionalità dell'applicazione SystemTime al manifesto dell'applicazione e quindi impostare il valore truesu . Il manifesto dell'applicazione Azure Sphere ha maggiori 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 standard clock_gettime .

Impostare l'ora di sistema

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

Sincronizzare l'ora di sistema con RTC

Quando il tempo di sistema è impostato, non persiste quando il dispositivo perde l'alimentazione. Per mantenere il tempo durante la perdita di alimentazione, chiamare la funzione clock_systohc Applicazioni. Quando clock_systohc è chiamata ora di sistema viene spostata in RTC.

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, sovrascriverà l'ora UTC quando il dispositivo dispone della connettività Internet. È possibile disabilitare il servizio client NTP; tuttavia, ciò può causare la mancata riuscita degli aggiornamenti cloud nel dispositivo se la differenza tra l'ora del sistema e l'ora del server NTP è troppo elevata.

Impostare il fuso orario

L'ora di sistema e l'ora RTC sono archiviate in GMT/UTC. È possibile modificare il fuso orario utilizzato dall'applicazione chiamando la setenv funzione per aggiornare la variabile di ambiente TZ e quindi chiamando la tzset funzione.

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

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

  • È possibile impostare il fuso orario corrente con o senza l'ora legale. Esempi: "EST+5", "EST+5EDT". Questo valore è positivo se il fuso orario locale è ad ovest del meridiano primo e negativo se è orientale.
  • Non è possibile specificare la data e l'ora in cui deve entrare in vigore l'ora legale.
  • Non è possibile specificare un file/database per il fuso orario.

Per mantenere le impostazioni del fuso orario durante una perdita di energia, è possibile usare l'archiviazione modificabile per archiviare il fuso orario in una memoria persistente 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. La fonte temporale 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 finché non viene eseguita una sincronizzazione corretta. Dopo la sincronizzazione dell'ora, tenta di risincronizzare l'ora una volta ogni 24 ore. Quando Azure Sphere esegue la sincronizzazione temporale, usa prima una porta di origine client UDP casuale compresa tra 32678-61000. Se questa porta non riesce, Azure Sphere prova a usare la porta 124 come porta di origine del client UDP.

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

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

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

Fallback

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

  • Il client tenterà di contattare prima il server per l'ora principale. Se il client non riesce a ottenere una risposta del server di tempo valida, tenterà il server di tempo secondario (se specificato).

  • Se viene specificato un server di tempo secondario e non riesce oppure se l'opzione per ripristinare le impostazioni predefinite del sistema operativo tramite Networking_NtpOption_FallbackServerEnabled ha esito negativo, il sistema contatterà l'origine 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 una query sul server di ora principale.
  • Se hai 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 temporali.

Dispositivi multisondato

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

Esempio di tempo di sistema

L'esempio System Time mostra come gestire l'ora di sistema e usare l'hardware RTC. L'applicazione di esempio imposta l'ora di sistema e quindi usa la clock_systohc funzione per sincronizzare l'ora di sistema con RTC.

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

Esempio di NTP personalizzato

Nell'esempio NTP personalizzato viene illustrato come configurare il servizio client NTP per ottenere tempo da più origini.