Dela via


Hantera systemtid och RTC i program på hög nivå

RTC (realtidsklocka) används för att hålla tiden på en Azure Sphere-enhet när enheten förlorar ström och inte har tillgång till en nätverksanslutning efter att enheten startats om. Det gör att enheten behåller tiden under en strömförlust även om den inte har åtkomst till en NTP-server.

Om du anger systemtiden bevaras den inte när enheten förlorar ström. Om du vill bevara tiden vid strömavbrott måste du anropa funktionen Applibs clock_systohc. När clock_systohc anropas överförs systemtiden till RTC.

RTC-krav

Program som använder RTC måste innehålla lämpliga rubrikfiler och lägga till RTC-inställningar i programmanifestet.

Sidhuvudfiler

Ta med rtc-sidhuvudet i projektet:

 #include <applibs\rtc.h>

Inställningar för programmanifest

Om du vill använda RTC- och standardklocka-API:erna måste du lägga till SystemTime programfunktionen i programmanifestet och sedan ange värdet till true. Azure Sphere-programmanifestet innehåller mer information om programmanifestet.

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

Hämta systemtiden

Ring standardfunktionen clock_gettime för att få systemtiden.

Ange systemtid

Om du vill ange systemtid anropar du standardfunktionen clock_settime .

Synkronisera systemtiden med RTC

När systemtiden är inställd bevaras den inte när enheten förlorar ström. Om du vill bevara tiden under strömavbrott anropar du funktionen Applibs clock_systohc . När clock_systohc kallas för systemtid överförs till RTC.

Konfigurera NTP-klienttjänsten

NTP-klienttjänsten är aktiverad som standard. Om du anger systemtiden när NTP-klienttjänsten är aktiverad skriver den över UTC-tiden när enheten har internetanslutning. Du kan inaktivera NTP-klienttjänsten. Detta kan dock orsaka att molnuppdateringar på enheten misslyckas om skillnaden mellan systemtiden och NTP-servertiden är för stor.

Ange tidszon

Systemtiden och RTC-tiden lagras i GMT/UTC. Du kan ändra tidszonen som används av programmet genom att anropa setenv funktionen för att uppdatera variabeln TZ-miljö och sedan anropa tzset funktionen.

Projektet SetTimeFromLocation visar hur du använder omvänd IP-sökning för att få platsinformation, hämtar tid för position och anger enhetstid. Det här projektet är en del av Azure Sphere-galleriet, en samling oavsiktliga skript, verktyg och funktioner.

Azure Sphere OS stöder vissa, men inte alla, möjliga format för variabeln TZ-miljö:

  • Du kan ange aktuell tidszon med eller utan sommartid. Exempel: "EST+5", "EST+5EDT". Detta värde är positivt om den lokala tidszonen ligger väster om Prime Meridian och negativ om den är östlig.
  • Du kan inte ange datum och tid när DST ska träda i kraft.
  • Du kan inte ange en tidszonsfil/databas.

Om du vill behålla tidszonsinställningarna under en strömförlust kan du använda mutable storage för att lagra tidszonen i beständiga lagringsutrymmen och sedan återkalla inställningen när enheten startas om.

Ange en NTP-server

NTP-klienttjänsten kan konfigureras för att hämta tid från flera källor. Standardtidskällan är prod.time.sphere.azure.net, enligt kraven för Azure Sphere OS-nätverk.

NTP-klienten försöker synkronisera tid var 15:e sekund tills en lyckad synkronisering har genomförts. När tiden har synkroniserats försöker den synkronisera tiden igen en gång var 24:e timme. När Azure Sphere utför tidssynkronisering används först en slumpmässig UDP-klientkällport mellan 32678-61000. Om den här porten misslyckas försöker Azure Sphere sedan använda port 124 som UDP-klientkällport.

Du kan ange att systemet ska få tid från en DHCP-server, eller så kan du ange tidskällan i programmet via Networking_TimeSync_EnableCustomNTP eller Networking_TimeSync_EnableDefaultNtp Function.

Om Azure Sphere har konfigurerats för att använda DHCP för tidsserverkällor bearbetas DHCP-alternativet 042 och NTP-klienten bearbetar endast de två första posterna som skickas med DHCP-alternativet, som bör anges i prioritetsordning. Dessa kommer att betraktas som en primär server och sekundär server.

Du kan också konfigurera en tidsserver via Networking_TimeSync_EnableCustomNTP om du vill ange den primära och sekundära tidsservern via programmet. Den maximala längden för varje gång server med fullständigt kvalificerat domännamn (FQDN) är 255 tecken.

Reservsystem

  • Om NTP-klienten har konfigurerats för att hämta tidsservrarna via DHCP eller API krävs en ytterligare parameter för att ange reservbeteende.

  • Klienten försöker kontakta den primära tidsservern först. Om klienten inte kan erhålla ett giltigt tidsserversvar provas den sekundära tidsservern (om den anges).

  • Om en sekundär tidsserver anges och den misslyckas, eller om alternativet att återgå till OS-standardvärden via Networking_NtpOption_FallbackServerEnabled misslyckas, kontaktar systemet standardtidskällan för operativsystemet prod.time.sphere.azure.net.

    • Under det kommande 24-timmarsintervallet för tidssynkronisering återgår operativsystemet och försöker fråga den primära tidsservern.
  • Om du angav Networking_NtpOption_FallbackServerDisabled fortsätter operativsystemet att fråga den primära och sekundära servern var 15:e sekund tills den har synkroniserats med en av tidsservrarna.

Multihomed-enheter

Inställningarna för tidsservern är en global inställning, inte en inställning per gränssnitt. Om Azure Sphere-enheten är multihomed och båda gränssnitten hämtar NTP-serverinformation via DHCP vinner den senast bearbetade DHCP NTP-uppsättningen alternativ.

Exempel på systemtid

Exempel på systemtid visar hur du hanterar systemtiden och använder maskinvaran RTC. Exempelprogrammet anger systemtiden och använder clock_systohc sedan funktionen för att synkronisera systemtiden med RTC.

Projektet SetTimeFromLocation visar hur du använder omvänd IP-sökning för att få platsinformation, hämtar tid för position och anger enhetstid. Det här projektet är en del av Azure Sphere-galleriet, en samling oavsiktliga skript, verktyg och funktioner.

Anpassat NTP-exempel

Exemplet Custom NTP visar hur du konfigurerar NTP-klienttjänsten för att få tid från flera källor.