Systeemtijd en rtc beheren in toepassingen op hoog niveau

De RTC (realtime klok) wordt gebruikt om tijd bij te houden op een Azure Sphere-apparaat 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 stroomuitval, zelfs als het geen toegang heeft tot een NTP-server.

Als u de systeemtijd instelt, blijft deze niet bestaan wanneer het apparaat stroom verliest. Als u de tijd tijdens stroomverlies wilt behouden, moet u de functie Applibs aanroepen clock_systohc. 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 bestaan 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 er echter voor zorgen 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 TZ-omgevingsvariabele bij te werken en vervolgens de functie aan tzset te roepen.

Het project SetTimeFromLocation laat zien hoe u omgekeerde IP-zoekactie gebruikt om locatiegegevens op te halen, vervolgens tijd voor de locatie op te halen 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 TZ-omgevingsvariabele:

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

Als u de tijdzone-instellingen wilt behouden tijdens een stroomuitval, kunt u veranderlijke 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 van meerdere bronnen te verkrijgen. De standaardtijdbron is prod.time.sphere.azure.net, zoals vermeld in de netwerkvereisten voor het Azure Sphere-besturingssysteem.

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

U kunt opgeven dat het systeem tijd krijgt van een DHCP-server of u kunt de tijdbron in de toepassing opgeven via Networking_TimeSync_EnableCustomNTP of Networking_TimeSync_EnableDefaultNtp Function.

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 moet worden vermeld. Deze worden beschouwd als een primaire 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 keer dat server fully qualified domain name (FQDN) is 255 tekens.

Fallback

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

  • De client probeert eerst contact op te maken met de primaire tijdserver. Als de client geen geldig antwoord van de tijdserver kan verkrijgen, wordt de secundaire tijdserver geprobeerd (indien opgegeven).

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

    • Op het volgende tijdsynchronisatie-interval 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 instellingen van de tijdserver 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 meest recent verwerkte DHCP NTP-set opties.

Voorbeeld van systeemtijd

In het voorbeeld systeemtijd ziet u hoe u de systeemtijd beheert en 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 omgekeerde IP-zoekactie gebruikt om locatiegegevens op te halen, vervolgens tijd voor de locatie op te halen 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.

Aangepast NTP-voorbeeld

In het voorbeeld aangepaste NTP ziet u hoe u de NTP-clientservice configureert om tijd te verkrijgen uit meerdere bronnen.