Udostępnij za pośrednictwem


Zarządzanie czasem systemowym i programem RTC w aplikacjach wysokiego poziomu

Funkcja RTC (zegar czasu rzeczywistego) służy do utrzymywania czasu na urządzeniu Azure Sphere, gdy urządzenie traci zasilanie i nie ma dostępu do połączenia sieciowego po ponownym uruchomieniu urządzenia. Dzięki temu urządzenie zachowuje czas podczas utraty zasilania, nawet jeśli nie ma dostępu do serwera NTP.

Jeśli ustawisz czas systemowy, nie będzie on trwał, gdy urządzenie utraci zasilanie. Aby zachować czas podczas utraty zasilania, należy wywołać funkcję Applibs clock_systohc. Po wywołaniu clock_systohc czas systemowy jest przesuwany do rtc.

Wymagania dotyczące programu RTC

Aplikacje korzystające z funkcji RTC muszą zawierać odpowiednie pliki nagłówków i dodawać ustawienia funkcji RTC do manifestu aplikacji.

Pliki nagłówków

Uwzględnij nagłówek rtc w projekcie:

 #include <applibs\rtc.h>

Ustawienia manifestu aplikacji

Aby używać interfejsów API zegara rtc i standardowego, należy dodać funkcję SystemTime aplikacji do manifestu aplikacji, a następnie ustawić truewartość . Manifest aplikacji Azure Sphere zawiera więcej szczegółów na temat manifestu aplikacji.

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

Uzyskaj czas systemowy

Aby uzyskać czas systemowy, wywołaj funkcję standardową clock_gettime .

Ustawianie czasu systemowego

Aby ustawić czas systemowy, wywołaj funkcję standardową clock_settime .

Synchronizowanie czasu systemowego z dokumentem RTC

Po ustawieniu czasu systemowego nie jest ono zachowywane, gdy urządzenie traci zasilanie. Aby zachować czas podczas utraty zasilania, wywołaj funkcję Applibs clock_systohc . Gdy clock_systohc jest nazywany czas systemowy jest wypychane do RTC.

Konfigurowanie usługi klienckiej NTP

Usługa klienta NTP jest domyślnie włączona. Jeśli ustawisz czas systemowy, gdy usługa klienckiego NTP jest włączona, spowoduje to zastąpienie czasu UTC, gdy urządzenie ma łączność z Internetem. Usługę klienta NTP można wyłączyć. może to jednak spowodować niepowodzenie aktualizacji w chmurze na urządzeniu, jeśli różnica między czasem systemowym a czasem serwera NTP jest zbyt duża.

Ustawianie strefy czasowej

Czas systemowy i czas RTC są przechowywane w formacie GMT/UTC. Możesz zmienić strefę czasową używaną przez aplikację, wywołując tę funkcję setenv w celu zaktualizowania zmiennej środowiskowej strefy czasowej, a następnie wywołując tę funkcję tzset .

W projekcie SetTimeFromLocation pokazano, jak za pomocą wyszukiwania odwrotnego adresu IP uzyskać informacje o lokalizacji, a następnie uzyskać czas dla lokalizacji i ustawić czas urządzenia. Ten projekt jest częścią Galerii Azure Sphere, kolekcji nieutrzymanych skryptów, narzędzi i funkcji.

System operacyjny Azure Sphere obsługuje niektóre, ale nie wszystkie możliwe formaty zmiennej środowiska TZ:

  • Bieżącą strefę czasową można ustawić z ustawieniem czasu letniego lub bez niej. Przykłady: "EST+5", "EST+5EDT". Ta wartość jest dodatnia, jeśli lokalna strefa czasowa znajduje się na zachód od południka głównego i ujemna, jeśli znajduje się na wschód.
  • Nie można określić daty i godziny wejścia w życie czasu wygaśnięcia.
  • Nie można określić pliku/bazy danych stref czasowych.

Aby zachować ustawienia strefy czasowej podczas utraty zasilania, możesz użyć magazynu z możliwością wyciszenia w celu przechowywania strefy czasowej w magazynie trwałym, a następnie odwołać to ustawienie po ponownym uruchomieniu urządzenia.

Określanie serwera NTP

Usługę klienta NTP można skonfigurować tak, aby uzyskiwać czas z wielu źródeł. Domyślnym źródłem czasu jest prod.time.sphere.azure.net, zgodnie z wymaganiami sieciowymi systemu operacyjnego Azure Sphere.

Klient NTP próbuje synchronizować czas co 15 sekund do momentu pomyślnej synchronizacji. Po pomyślnej synchronizacji czasu próbuje ponownie zsynchronizować czas raz na 24 godziny. Gdy usługa Azure Sphere przeprowadza synchronizację czasu, najpierw używa losowego portu źródłowego klienta UDP w przedziale od 32678 do 61000. Jeśli ten port zakończy się niepowodzeniem, usługa Azure Sphere spróbuje użyć portu 124 jako portu źródłowego klienta UDP.

Można określić, że system uzyskuje czas z serwera DHCP lub można określić źródło czasu w aplikacji za pomocą Networking_TimeSync_EnableCustomNTP lub funkcji Networking_TimeSync_EnableDefaultNtp.

Jeśli skonfigurowano używanie protokołu DHCP dla źródeł serwera czasowego, usługa Azure Sphere przetworzyć będzie opcję DHCP 042, a klient NTP przetworzy tylko pierwsze dwa wpisy wysłane w opcji DHCP, które powinny być wymienione w kolejności preferencji. Będą one traktowane jako serwer podstawowy i serwer pomocniczy.

Możesz również skonfigurować serwer czasu za pośrednictwem Networking_TimeSync_EnableCustomNTP , jeśli chcesz określić podstawowy i pomocniczy serwer czasu za pośrednictwem aplikacji. Maksymalna długość dla każdego serwera w pełni kwalifikowanej nazwy domeny (FQDN) wynosi 255 znaków.

Rezerwowej

  • Jeśli klient NTP jest skonfigurowany do uzyskiwania serwerów czasu za pośrednictwem protokołu DHCP lub interfejsu API, do określenia zachowania rezerwowego jest wymagany dodatkowy parametr.

  • Klient spróbuje najpierw skontaktować się z podstawowym serwerem czasu. Jeśli klient nie uzyska prawidłowej odpowiedzi serwera czasu, spróbuje skorzystać z pomocniczego serwera czasu (jeśli zostanie określona).

  • Jeśli zostanie określony pomocniczy serwer czasu, który zawiedzie lub jeśli opcja powrotu do domyślnych ustawień systemu operacyjnego zakończy się niepowodzeniem Networking_NtpOption_FallbackServerEnabled , system skontaktuje się z domyślnym źródłem czasu systemu operacyjnego prod.time.sphere.azure.net.

    • W następnym 24-godzinnym interwale synchronizacji system operacyjny powróci i spróbuje wykonać zapytanie do podstawowego serwera czasu.
  • Jeśli określono Networking_NtpOption_FallbackServerDisabled, system operacyjny będzie nadal co 15 sekund kwerendować na serwerze podstawowym i pomocniczym, dopóki nie zostanie pomyślnie zsynchronizowany z jednym z serwerów czasowych.

Urządzenia wielozadaniowe

Ustawienia serwera czasu są ustawieniem globalnym, a nie ustawieniem interfejsu. Jeśli urządzenie Azure Sphere jest wieloadresowe i oba interfejsy uzyskują informacje o serwerze NTP za pośrednictwem protokołu DHCP, wygrywa ostatnio przetworzony zestaw opcji NTP DHCP.

Próbka czasu systemowego

W przykładzie czasu systemowego pokazano, jak zarządzać czasem systemowym i korzystać ze sprzętu RTC. Przykładowa aplikacja ustawia czas systemowy, a następnie używa clock_systohc tej funkcji do synchronizowania czasu systemowego z funkcją RTC.

W projekcie SetTimeFromLocation pokazano, jak za pomocą wyszukiwania odwrotnego adresu IP uzyskać informacje o lokalizacji, a następnie uzyskać czas dla lokalizacji i ustawić czas urządzenia. Ten projekt jest częścią Galerii Azure Sphere, kolekcji nieutrzymanych skryptów, narzędzi i funkcji.

Niestandardowa próbka NTP

W przykładzie ntp niestandardowym pokazano, jak skonfigurować usługę klienta NTP w celu uzyskania czasu z wielu źródeł.