Freigeben über


Verwalten der Systemzeit und der Echtzeituhr in allgemeinen Anwendungen

Wichtig

Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.

Die Echtzeituhr (Real-Time Clock, RTC) wird für die Steuerung der Zeit auf einem Azure Sphere-Gerät genutzt, wenn die Stromverbindung des Geräts getrennt wird und nach dem Neustart des Geräts kein Zugriff auf eine Netzwerkverbindung besteht. So kann für das Gerät die Zeit während eines Stromausfalls auch dann beibehalten werden, wenn vorübergehend kein Zugriff auf einen NTP-Server möglich ist.

Wenn Sie die Systemzeit festlegen, wird sie nicht beibehalten, falls die Stromverbindung des Geräts getrennt wird. Zum Beibehalten der Zeit während eines Stromausfalls müssen Sie beispielsweise die Applibs-Funktion clock_systohc aufrufen. Wenn „clock_systohc“ aufgerufen wird, wird die Systemzeit per Pushvorgang auf die Echtzeituhr übertragen.

RTC-Anforderungen

Für Anwendungen, die die Echtzeituhr verwenden, müssen die passenden Headerdateien eingefügt und dem Anwendungsmanifest RTC-Einstellungen hinzugefügt werden.

Headerdateien

Fügen Sie den rtc-Header in Ihr Projekt ein:

 #include <applibs\rtc.h>

Einstellungen für das Anwendungsmanifest

Für die Verwendung der RTC- und Standarduhr-APIs müssen Sie dem Anwendungsmanifest die Anwendungsfunktion SystemTime hinzufügen und dann den Wert auf true festlegen. Das Azure Sphere-Anwendungsmanifest enthält weitere Details zum Anwendungsmanifest .

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

Abrufen der Systemzeit

Rufen Sie zum Abrufen der Systemzeit die Standardfunktion clock_gettime auf.

Festlegen der Systemzeit

Rufen Sie zum Festlegen der Systemzeit die Standardfunktion clock_settime auf.

Synchronisieren der Systemzeit mit der Echtzeituhr

Wenn die Systemzeit festgelegt wurde, wird sie nicht beibehalten, falls die Stromverbindung des Geräts getrennt wird. Rufen Sie die Applibs-clock_systohc-Funktion auf, um die Zeit während des Stromausfalls beizubehalten. Wenn „clock_systohc“ aufgerufen wird, wird die Systemzeit per Pushvorgang auf die Echtzeituhr übertragen.

Konfigurieren des NTP-Clientdiensts

Der NTP-Clientdienst ist standardmäßig aktiviert. Wenn Sie die Systemzeit bei aktiviertem NTP-Clientdienst festlegen, wird die UTC-Zeit überschrieben, sobald das Gerät über eine Internetverbindung verfügt. Sie können den NTP-Clientdienst deaktivieren. Dies kann aber dazu führen, dass Cloudupdates auf dem Gerät nicht erfolgreich sind, falls der Unterschied zwischen der Systemzeit und der NTP-Serverzeit zu groß ist.

Festlegen der Zeitzone

Die Systemzeit und die RTC-Zeit werden im GMT/UTC-Format gespeichert. Sie können die von Ihrer Anwendung verwendete Zeitzone ändern, indem Sie die Funktion setenv aufrufen, um die TZ-Umgebungsvariable zu aktualisieren. Anschließend rufen Sie die Funktion tzset auf.

Das SetTimeFromLocation-Projekt zeigt, wie Sie die Reverse-IP-Suche verwenden, um Standortinformationen abzurufen, die Uhrzeit für den Standort abzurufen und Die Gerätezeit festzulegen. Dieses Projekt ist Teil des Azure Sphere Gallery, einer Sammlung nicht verwalteter Skripts, Dienstprogramme und Funktionen.

Das Azure Sphere-Betriebssystem unterstützt einige, aber nicht alle möglichen Formate für die TZ-Umgebungsvariable:

  • Sie können die aktuelle Zeitzone mit oder ohne Sommerzeit (DST) festlegen. Beispiele: „EST + 5“, „EST + 5EDT“. Dieser Wert ist positiv, wenn die lokale Zeitzone westlich des Nullmeridians liegt, und negativ, wenn sie östlich liegt.
  • Sie können das Datum und die Uhrzeit, zu der DST in Kraft treten soll, nicht angeben.
  • Sie können keine Zeitzonendatei/Datenbank angeben.

Um die Zeitzoneneinstellungen während eines Stromausfalls beizubehalten, können Sie den veränderbaren Speicher verwenden, um die Zeitzone im beständigen Speicher zu speichern und dann die Einstellung zurückzurufen, wenn das Gerät neu gestartet wird.

Angeben eines NTP-Servers

Der NTP-Clientdienst kann so konfiguriert werden, dass er Zeit aus mehreren Quellen abruft. Die Standardzeitquelle ist prod.time.sphere.azure.net, wie in den Azure Sphere OS-Netzwerkanforderungen angegeben.

Der NTP-Client versucht, alle 15 Sekunden zu synchronisieren, bis eine erfolgreiche Synchronisierung erfolgt ist. Nach der erfolgreichen Synchronisierung der Zeit wird versucht, die Zeit einmal alle 24 Stunden erneut zu synchronisieren. Wenn Azure Sphere eine Zeitsynchronisierung durchführt, wird zunächst ein zufälliger UDP-Clientquellport zwischen 32678-61000 verwendet. Wenn dieser Port fehlschlägt, versucht Azure Sphere, Port 124 als UDP-Clientquellport zu verwenden.

Sie können angeben, dass das System Zeit von einem DHCP-Server abruft, oder Sie können die Zeitquelle in der Anwendung über Networking_TimeSync_EnableCustomNTP oder Networking_TimeSync_EnableDefaultNTP angeben.

Wenn für die Verwendung von DHCP für Zeitserverquellen konfiguriert ist, verarbeitet Azure Sphere die DHCP-Option 042, und der NTP-Client verarbeitet nur die ersten beiden Einträge, die in der DHCP-Option gesendet werden, die in der Reihenfolge der Voreinstellung aufgeführt werden sollen. Diese werden als primärer Server und sekundärer Server betrachtet.

Sie können auch einen Zeitserver über Networking_TimeSync_EnableCustomNTP konfigurieren, wenn Sie den primären und sekundären Zeitserver über die Anwendung angeben möchten. Die maximale Länge für jedes Mal, wenn der vollqualifizierte Domänenname (Fully Qualified Domain Name, FQDN) des Servers 255 Zeichen beträgt.

Fallback

  • Wenn der NTP-Client so konfiguriert ist, dass die Zeitserver über DHCP oder API bezogen werden, ist ein zusätzlicher Parameter erforderlich, um das Fallbackverhalten anzugeben.

  • Der Client versucht zuerst, den primären Server zu kontaktieren. Wenn der Client keine gültige Zeitserverantwort abruft, wird der sekundäre Zeitserver (sofern angegeben) versucht.

  • Wenn ein sekundärer Zeitserver angegeben ist und ein Fehler auftritt, oder wenn die Option, über einen Fehler auf die Betriebssystemstandardeinstellungen Networking_NtpOption_FallbackServerEnabled zurückzugreifen, tritt das System dann mit der standardbetriebssystemzeitquelle prod.time.sphere.azure.net in Verbindung.

    • Im nächsten 24-Stunden-Synchronisierungsintervall wechselt das Betriebssystem zurück und versucht, den primären Zeitserver abzufragen.
  • Wenn Sie Networking_NtpOption_FallbackServerDisabled angegeben haben, fragt das Betriebssystem den primären und sekundären Server alle 15 Sekunden ab, bis er erfolgreich mit einem der Zeitserver synchronisiert wurde.

Multihomed-Geräte

Bei den Zeitservereinstellungen handelt es sich um eine globale Einstellung, nicht um eine Einstellung pro Schnittstelle. Wenn das Azure Sphere-Gerät multihomed ist und beide Schnittstellen NTP-Serverinformationen über DHCP abrufen, gewinnt der zuletzt verarbeitete DHCP-NTP-Satz von Optionen.

Beispiel für Systemzeit

Das Beispiel für die Systemzeit veranschaulicht, wie Sie die Systemzeit verwalten und die Hardware-Echtzeituhr nutzen. Die Beispielanwendung legt die Systemzeit fest und verwendet dann die clock_systohc Funktion, um die Systemzeit mit dem RTC zu synchronisieren.

Das SetTimeFromLocation-Projekt zeigt, wie Sie die Reverse-IP-Suche verwenden, um Standortinformationen abzurufen, die Uhrzeit für den Standort abzurufen und Die Gerätezeit festzulegen. Dieses Projekt ist Teil des Azure Sphere Gallery, einer Sammlung nicht verwalteter Skripts, Dienstprogramme und Funktionen.

Benutzerdefiniertes NTP-Beispiel

Im Beispiel für benutzerdefinierte NTP wird gezeigt, wie Der NTP-Clientdienst so konfiguriert wird, dass Zeit aus mehreren Quellen abgerufen wird.