Hantera systemtid och RTC i högnivåprogram
Viktigt!
Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).
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 någon åtkomst till en nätverksanslutning efter att enheten har startats om. Detta gör att enheten kan underhålla tiden under en strömförlust även om den inte har åtkomst till en NTP-server.
Om du anger systemtiden sparas den inte när enheten förlorar ström. Om du vill spara tiden under strömförlusten måste du anropa funktionen Applibs clock_systohc. När clock_systohc anropas skickas systemtiden till RTC.
RTC-krav
Program som använder RTC måste innehålla lämpliga huvudfiler och lägga till RTC-inställningar i programmanifestet.
Rubrikfiler
Inkludera rtc-huvudet i projektet:
#include <applibs\rtc.h>
Inställningar för programmanifest
Om du vill använda RTC- och standardklockans API:er 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
Anropa standardfunktionen clock_gettime
för att hämta systemtiden.
Ange systemtid
Om du vill ange systemtiden anropar du standardfunktionen clock_settime
.
Synkronisera systemtiden med RTC
När systemtiden är inställd sparas den inte när enheten förlorar ström. Om du vill spara tiden under strömavbrott anropar du funktionen Applibs clock_systohc . När clock_systohc anropas skickas systemtiden till RTC.
Konfigurera NTP-klienttjänsten
NTP-klienttjänsten är aktiverad som standard. Om du anger systemtiden medan NTP-klienttjänsten är aktiverad, skrivs UTC-tiden över 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 tidszonen
Systemtiden och RTC-tiden lagras i GMT/UTC. Du kan ändra tidszonen som används av ditt program genom att anropa setenv
funktionen för att uppdatera TZ-miljövariabeln och sedan anropa tzset
funktionen.
Projektet SetTimeFromLocation visar hur du använder omvänd IP-sökning för att hämta platsinformation, sedan hämta tid för plats och ange enhetens tid. 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 TZ-miljövariabeln:
- Du kan ange den aktuella tidszonen med eller utan sommartid (DST). Exempel: "EST+5", "EST+5EDT". Det här värdet ä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 föränderlig lagring för att lagra tidszonen i beständig lagring 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 vad som anges i nätverkskraven för Azure Sphere OS.
NTP-klienten försöker synkronisera tiden var 15:e sekund tills en lyckad synkronisering har utförts. När tiden har synkroniserats försöker den synkronisera om tiden en gång var 24:e timme. När Azure Sphere utför tidssynkronisering använder den 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.
Om du har konfigurerat att använda DHCP för tidsserverkällor bearbetar Azure Sphere DHCP-alternativet 042 och NTP-klienten bearbetar endast de två första posterna som skickas i DHCP-alternativet, som bör anges i prioritetsordning. Dessa 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 serverns fullständigt kvalificerade domännamn (FQDN) är 255 tecken.
Reserv
Om NTP-klienten har konfigurerats för att hämta tidsservrar via DHCP eller API krävs ytterligare en parameter för att ange återställningsbeteende.
Klienten försöker kontakta den primära tidsservern först. Om klienten inte kan hämta ett giltigt tidsserversvar provar den den sekundära tidsservern (om den anges).
Om en sekundär tidsserver har angetts och den misslyckas, eller om alternativet att återgå till os-standardvärden via
Networking_NtpOption_FallbackServerEnabled
misslyckas, kontaktar systemet standardvärdet för os-tidskällan prod.time.sphere.azure.net.- Vid nästa synkroniseringsintervall på 24 timmar går operativsystemet tillbaka och försöker köra frågor mot den primära tidsservern.
Om du har angett 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
Tidsserverinställningarna ä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 med alternativ.
Systemtidsexempel
Exempel på systemtid visar hur du hanterar systemtiden och använder maskinvaru-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 hämta platsinformation, sedan hämta tid för plats och ange enhetens tid. Det här projektet är en del av Azure Sphere-galleriet, en samling oavsiktliga skript, verktyg och funktioner.
Anpassat NTP-exempel
Det anpassade NTP-exemplet visar hur du konfigurerar NTP-klienttjänsten för att hämta tid från flera källor.