Verwalten der Systemzeit und der RTC in allgemeinen Anwendungen

Die RTC (Echtzeituhr) wird verwendet, um die Zeit auf einem Azure Sphere-Gerät beizubehalten, wenn das Gerät stromlos ist und nach dem Neustart des Geräts keinen Zugriff auf eine Netzwerkverbindung hat. Dies ermöglicht es dem Gerät, die Zeit während eines Stromausfalls beizubehalten, auch wenn es keinen Zugriff auf einen NTP-Server hat.

Wenn Sie die Systemzeit festlegen, wird sie nicht beibehalten, wenn das Gerät die Stromversorgung verliert. Um die Zeit während eines Stromausfalls beizubehalten, müssen Sie die Applibs-Funktion clock_systohc aufrufen. Wenn clock_systohc aufgerufen wird, wird die Systemzeit an die RTC übertragen.

RTC-Anforderungen

Anwendungen, die rtc verwenden, müssen die entsprechenden Headerdateien enthalten und rtc-Einstellungen zum Anwendungsmanifest hinzufügen.

Headerdateien

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

 #include <applibs\rtc.h>

Anwendungsmanifesteinstellungen

Um die RTC- und Standarduhr-APIs zu verwenden, müssen Sie die SystemTime Anwendungsfunktion zum Anwendungsmanifest hinzufügen und dann den Wert auf truefestlegen. 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 die Standardfunktion clock_gettime auf, um die Systemzeit abzurufen.

Festlegen der Systemzeit

Um die Systemzeit festzulegen, rufen Sie die Standardfunktion clock_settime auf.

Synchronisieren der Systemzeit mit dem RTC

Wenn die Systemzeit festgelegt ist, wird sie nicht beibehalten, wenn das Gerät die Stromversorgung verliert. Um die Zeit während eines Stromausfalls beizubehalten, rufen Sie die Applibs-clock_systohc-Funktion auf. Wenn clock_systohc aufgerufen wird, wird die Systemzeit an die RTC gepusht.

Konfigurieren des NTP-Clientdiensts

Der NTP-Clientdienst ist standardmäßig aktiviert. Wenn Sie die Systemzeit festlegen, während der NTP-Clientdienst aktiviert ist, wird die UTC-Zeit überschrieben, wenn das Gerät über Eine Internetverbindung verfügt. Sie können den NTP-Clientdienst deaktivieren. Dies kann jedoch dazu führen, dass Cloudupdates auf dem Gerät fehlschlagen, wenn der Unterschied zwischen der Systemzeit und der NTP-Serverzeit zu groß ist.

Festlegen der Zeitzone

Die Systemzeit und die RTC-Zeit werden in GMT/UTC gespeichert. Sie können die von Ihrer Anwendung verwendete Zeitzone ändern, indem Sie die setenv -Funktion aufrufen, um die TZ-Umgebungsvariable zu aktualisieren, und dann die tzset Funktion aufrufen.

Das SetTimeFromLocation-Projekt zeigt, wie Reverse-IP-Suche verwendet wird, um Standortinformationen abzurufen, dann Zeit für den Standort abzurufen und die Gerätezeit festzulegen. Dieses Projekt ist Teil des Azure Sphere-Katalogs, einer Sammlung nicht erhaltener Skripts, Hilfsprogramme 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 sich die lokale Zeitzone westlich des Nullmeridians befindet, und negativ, wenn er sich östlich befindet.
  • Das Datum und die Uhrzeit, zu dem die Gültigkeitsdauer wirksam werden soll, können nicht angegeben werden.
  • Sie können keine Zeitzonendatei/-datenbank angeben.

Um die Zeitzoneneinstellungen während eines Stromausfalls beizubehalten, können Sie änderbaren Speicher verwenden, um die Zeitzone im persistenten Speicher zu speichern und dann die Einstellung beim Neustart des Geräts zurückzurufen.

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 Netzwerkanforderungen für das Azure Sphere-Betriebssystem angegeben.

Der NTP-Client versucht alle 15 Sekunden, die Zeit zu synchronisieren, bis eine erfolgreiche Synchronisierung erfolgt ist. Nach erfolgreicher 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 und 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-Funktion 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 ihrer Präferenzen aufgeführt werden sollten. 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 jeden vollqualifizierten Serverdomänennamen (Fully Qualified Domain Name, FQDN) beträgt 255 Zeichen.

Fallback

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

  • Der Client versucht zuerst, den primären Zeitserver zu kontaktieren. Wenn der Client keine gültige Zeitserverantwort erhält, versucht er den sekundären Zeitserver (sofern angegeben).

  • Wenn ein sekundärer Zeitserver angegeben wird und dieser fehlschlägt, oder wenn die Option zum Fallback auf die Betriebssystemstandardeinstellungen über Networking_NtpOption_FallbackServerEnabled fehlschlägt, kontaktiert das System die Standardzeitquelle des Betriebssystems prod.time.sphere.azure.net.

    • Im nächsten 24-Stunden-Zeitsynchronisierungsintervall 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 weiterhin alle 15 Sekunden ab, bis er erfolgreich mit einem der Zeitserver synchronisiert wurde.

Multihomed-Geräte

Die Zeitservereinstellungen sind eine globale Einstellung, keine Pro-Schnittstellen-Einstellung. Wenn das Azure Sphere-Gerät mehrfach vernetzt ist und beide Schnittstellen NTP-Serverinformationen über DHCP abrufen, gewinnt die zuletzt verarbeitete DHCP-NTP-Gruppe von Optionen.

Systemzeitbeispiel

Im Beispiel "Systemzeit " wird gezeigt, wie Sie die Systemzeit verwalten und die Hardware-RTC verwenden. Die Beispielanwendung legt die Systemzeit fest und verwendet dann die clock_systohc -Funktion, um die Systemzeit mit der RTC zu synchronisieren.

Das SetTimeFromLocation-Projekt zeigt, wie Reverse-IP-Suche verwendet wird, um Standortinformationen abzurufen, dann Zeit für den Standort abzurufen und die Gerätezeit festzulegen. Dieses Projekt ist Teil des Azure Sphere-Katalogs, einer Sammlung nicht erhaltener Skripts, Hilfsprogramme und Funktionen.

Benutzerdefiniertes NTP-Beispiel

Das Benutzerdefinierte NTP-Beispiel zeigt, wie Sie den NTP-Clientdienst so konfigurieren, dass zeit aus mehreren Quellen abgerufen wird.