Delen via


Systeemtijd en RTC beheren in toepassingen op hoog niveau

Belangrijk

Dit is de Documentatie voor Azure Sphere (verouderd). Azure Sphere (verouderd) wordt op 27 september 2027 buiten gebruik gesteld en gebruikers moeten tegen deze tijd migreren naar Azure Sphere (geïntegreerd). Gebruik de versiekiezer boven de inhoudsweergave om de Documentatie van Azure Sphere (geïntegreerd) weer te geven.

De RTC (realtime klok) wordt gebruikt om tijd op een Azure Sphere-apparaat te houden wanneer het apparaat stroom verliest en geen toegang heeft tot een netwerkverbinding nadat het apparaat opnieuw is opgestart. Hierdoor kan het apparaat tijd behouden tijdens een stroomverlies, zelfs als het geen toegang heeft tot een NTP-server.

Als u de systeemtijd instelt, blijft deze niet behouden wanneer het apparaat stroom verliest. Als u de tijd tijdens stroomverlies wilt behouden, moet u de functie Applibs clock_systohc aanroepen. Wanneer clock_systohc wordt aangeroepen, wordt de systeemtijd naar de RTC gepusht.

RTC-vereisten

Toepassingen die gebruikmaken van de RTC moeten de juiste headerbestanden bevatten en RTC-instellingen toevoegen aan het toepassingsmanifest.

Koptekstbestanden

Neem de rtc-header op in uw project:

 #include <applibs\rtc.h>

Toepassingsmanifestinstellingen

Als u de RTC- en standaardklok-API's wilt gebruiken, moet u de SystemTime toepassingsmogelijkheid toevoegen aan het toepassingsmanifest en vervolgens de waarde instellen op true. Het Azure Sphere-toepassingsmanifest bevat meer informatie over het toepassingsmanifest.

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

De systeemtijd ophalen

Als u de systeemtijd wilt ophalen, roept u de standaardfunctie clock_gettime aan.

De systeemtijd instellen

Als u de systeemtijd wilt instellen, roept u de standaardfunctie clock_settime aan.

De systeemtijd synchroniseren met de RTC

Wanneer de systeemtijd is ingesteld, blijft deze niet behouden wanneer het apparaat stroom verliest. Als u de tijd tijdens stroomverlies wilt behouden, roept u de functie Applibs clock_systohc aan. Wanneer clock_systohc wordt aangeroepen, wordt de systeemtijd naar de RTC gepusht.

De NTP-clientservice configureren

De NTP-clientservice is standaard ingeschakeld. Als u de systeemtijd instelt terwijl de NTP-clientservice is ingeschakeld, wordt de UTC-tijd overschreven wanneer het apparaat een internetverbinding heeft. U kunt de NTP-clientservice uitschakelen. Dit kan echter ertoe leiden dat cloudupdates op het apparaat mislukken als het verschil tussen de systeemtijd en de NTP-servertijd te groot is.

De tijdzone instellen

De systeemtijd en de RTC-tijd worden opgeslagen in GMT/UTC. U kunt de tijdzone wijzigen die door uw toepassing wordt gebruikt door de setenv functie aan te roepen om de omgevingsvariabele TZ bij te werken en vervolgens de tzset functie aan te roepen.

Het project SetTimeFromLocation laat zien hoe u reverse IP-zoekacties gebruikt om locatiegegevens op te halen, vervolgens tijd te verkrijgen voor de locatie en de apparaattijd in te stellen. Dit project maakt deel uit van de Azure Sphere Gallery, een verzameling niet-onderhouden scripts, hulpprogramma's en functies.

Het Azure Sphere-besturingssysteem ondersteunt enkele, maar niet alle, mogelijke indelingen voor de omgevingsvariabele TZ:

  • U kunt de huidige tijdzone instellen met of zonder zomertijd (DST). Voorbeelden: "EST+5", "EST+5EDT". Deze waarde is positief als de lokale tijdzone zich ten westen van de PrimeDian bevindt en negatief is als het oost is.
  • U kunt de datum en tijd waarop DST van kracht moet worden, niet opgeven.
  • U kunt geen tijdzonebestand/-database opgeven.

Als u de tijdzone-instellingen tijdens een stroomverlies wilt behouden, kunt u onveranderbare opslag gebruiken om de tijdzone op te slaan in permanente opslag en de instelling vervolgens intrekken wanneer het apparaat opnieuw wordt opgestart.

Een NTP-server opgeven

De NTP-clientservice kan worden geconfigureerd om tijd te verkrijgen van meerdere bronnen. De standaardtijdbron is prod.time.sphere.azure.net, zoals vermeld in de netwerkvereisten voor het Azure Sphere-besturingssysteem.

De NTP-client probeert elke 15 seconden tijd te synchroniseren totdat een geslaagde synchronisatie heeft plaatsgevonden. Nadat de tijd is gesynchroniseerd, wordt geprobeerd om de tijd elke 24 uur opnieuw te synchroniseren. Wanneer Azure Sphere tijdsynchronisatie uitvoert, wordt eerst een willekeurige UDP-clientbronpoort gebruikt tussen 32678-61000. Als deze poort mislukt, probeert Azure Sphere poort 124 te gebruiken als de UDP-clientbronpoort.

U kunt opgeven dat het systeem tijd verkrijgt van een DHCP-server, of u kunt de tijdbron in de toepassing opgeven via Networking_TimeSync_EnableCustomNTP of Networking_TimeSync_EnableDefaultNTP.

Als deze is geconfigureerd voor het gebruik van DHCP voor tijdserverbronnen, verwerkt Azure Sphere de DHCP-optie 042 en verwerkt de NTP-client alleen de eerste twee vermeldingen die zijn verzonden in de DHCP-optie, die in volgorde van voorkeur moeten worden vermeld. Deze worden beschouwd als een primaire server en secundaire server.

U kunt ook een tijdserver configureren via Networking_TimeSync_EnableCustomNTP als u de primaire en secundaire tijdserver via de toepassing wilt opgeven. De maximale lengte voor elke server FQDN (Fully Qualified Domain Name) is 255 tekens.

Terugval

  • Als de NTP-client is geconfigureerd voor het verkrijgen van de tijdservers via DHCP of API, is een extra parameter vereist om terugvalgedrag op te geven.

  • De client probeert eerst contact op te maken met de primaire server. Als de client geen geldig tijdserverantwoord krijgt, wordt de secundaire tijdserver (indien opgegeven) geprobeerd.

  • Als er een secundaire tijdserver is opgegeven en deze mislukt, of als de optie om terug te vallen op de standaardinstellingen van het besturingssysteem via Networking_NtpOption_FallbackServerEnabled een storing, neemt het systeem contact op met de bron van de standaardtijd van het besturingssysteem prod.time.sphere.azure.net.

    • In het volgende tijdssynchronisatieinterval van 24 uur gaat het besturingssysteem terug en probeert het een query uit te voeren op de primaire tijdserver.
  • Als u Networking_NtpOption_FallbackServerDisabled hebt opgegeven, blijft het besturingssysteem elke 15 seconden een query uitvoeren op de primaire en secundaire server totdat het is gesynchroniseerd met een van de tijdservers.

Multihomed-apparaten

De tijdserverinstellingen zijn een globale instelling, niet een instelling per interface. Als het Azure Sphere-apparaat multihomed is en beide interfaces NTP-servergegevens verkrijgen via DHCP, wint de laatst verwerkte DHCP NTP set opties.

Voorbeeld van systeemtijd

In het voorbeeld systeemtijd ziet u hoe u de systeemtijd beheert en hoe u de HARDWARE RTC gebruikt. De voorbeeldtoepassing stelt de systeemtijd in en gebruikt vervolgens de clock_systohc functie om de systeemtijd te synchroniseren met de RTC.

Het project SetTimeFromLocation laat zien hoe u reverse IP-zoekacties gebruikt om locatiegegevens op te halen, vervolgens tijd te verkrijgen voor de locatie en de apparaattijd in te stellen. Dit project maakt deel uit van de Azure Sphere Gallery, een verzameling niet-onderhouden scripts, hulpprogramma's en functies.

Voorbeeld van aangepaste NTP

Het voorbeeld van aangepaste NTP laat zien hoe u de NTP-clientservice configureert om tijd te verkrijgen van meerdere bronnen.