Zarządzanie czasem systemowym i rtC w aplikacjach wysokiego poziomu
Ważne
Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).
RtC (zegar czasu rzeczywistego) służy do przechowywania czasu na urządzeniu usługi 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ły, gdy urządzenie utraci moc. Aby utrwał czas podczas utraty mocy, należy wywołać funkcję Applibs clock_systohc. Po wywołaniu clock_systohc czas systemowy jest wypychany do RTC.
Wymagania RTC
Aplikacje korzystające z rtC muszą zawierać odpowiednie pliki nagłówka i dodać ustawienia RTC do manifestu aplikacji.
Pliki nagłówkowe
Uwzględnij nagłówek rtc w projekcie:
#include <applibs\rtc.h>
Ustawienia manifestu aplikacji
Aby korzystać z interfejsów API RTC i standardowego zegara, należy dodać SystemTime
możliwość aplikacji do manifestu aplikacji, a następnie ustawić wartość na true
. Manifest aplikacji usługi 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
}
}
Pobieranie czasu systemowego
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 systemu z protokołem RTC
Po ustawieniu czasu systemowego nie będzie się powtarzać, gdy urządzenie traci moc. Aby utrwały czas podczas utraty zasilania, wywołaj funkcję applibs clock_systohc . Gdy clock_systohc jest wywoływany czas systemowy jest wypychany do RTC.
Konfigurowanie usługi klienta NTP
Usługa klienta NTP jest domyślnie włączona. Jeśli ustawisz czas systemowy, gdy usługa kliencka NTP jest włączona, zostanie zastąpiony czas UTC, gdy urządzenie ma łączność z Internetem. Można wyłączyć usługę klienta NTP, jednak może to 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 GMT/UTC. Strefę czasową używaną przez aplikację można zmienić, wywołując setenv
funkcję w celu zaktualizowania zmiennej środowiskowej TZ, a następnie wywołując tzset
funkcję.
W projekcie SetTimeFromLocation pokazano, jak za pomocą wyszukiwania wstecznego adresu IP uzyskać informacje o lokalizacji, a następnie uzyskać czas lokalizacji i ustawić czas urządzenia. Ten projekt jest częścią galerii usługi Azure Sphere, kolekcji niezamierzonych skryptów, narzędzi i funkcji.
System operacyjny usługi Azure Sphere obsługuje niektóre, ale nie wszystkie możliwe formaty zmiennej środowiskowej TZ:
- Możesz ustawić bieżącą strefę czasową z lub bez czasu letniego (DST). Przykłady: "EST+5", "EST+5EDT". Ta wartość jest dodatnia, jeśli lokalna strefa czasowa znajduje się na zachód od Prime Sydney i ujemna, jeśli jest wschodnia.
- Nie można określić daty i godziny wejścia w życie.
- Nie można określić pliku/bazy danych strefy czasowej.
Aby zachować ustawienia strefy czasowej podczas utraty zasilania, można użyć magazynu modyfikowalnego do przechowywania strefy czasowej w magazynie trwałym, a następnie odwołać ustawienie po ponownym uruchomieniu urządzenia.
Określanie serwera NTP
Usługę klienta NTP można skonfigurować w celu uzyskania czasu z wielu źródeł. Domyślnym źródłem czasu jest prod.time.sphere.azure.net
, jak wspomniano w wymaganiach dotyczących sieci systemu operacyjnego usługi Azure Sphere.
Klient NTP próbuje zsynchronizować czas co 15 sekund do momentu pomyślnej synchronizacji. Po pomyślnym zsynchronizowaniu czasu próbuje ponownie zsynchronizować czas co 24 godziny. Gdy usługa Azure Sphere wykonuje synchronizację czasu, najpierw używa losowego portu źródłowego klienta UDP z zakresu 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 pośrednictwem Networking_TimeSync_EnableCustomNTP lub Networking_TimeSync_EnableDefaultNTP.
Jeśli jest skonfigurowany do używania protokołu DHCP dla źródeł serwera czasu, usługa Azure Sphere przetworzy 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. Zostaną one uznane za serwer podstawowy i serwer pomocniczy.
Serwer czasu można również skonfigurować za pośrednictwem Networking_TimeSync_EnableCustomNTP , jeśli chcesz określić serwer czasu podstawowego i pomocniczego za pośrednictwem aplikacji. Maksymalna długość dla każdego czasu, gdy w pełni kwalifikowana nazwa domeny serwera (FQDN) wynosi 255 znaków.
Temat rezerwowy
Jeśli klient NTP jest skonfigurowany do uzyskiwania serwerów czasu za pośrednictwem protokołu DHCP lub interfejsu API, dodatkowy parametr jest wymagany do określenia zachowania rezerwowego.
Klient spróbuje najpierw skontaktować się z serwerem czasu podstawowego. Jeśli klient nie uzyska prawidłowej odpowiedzi serwera czasu, spróbuje pomocniczego serwera czasu (jeśli określono).
Jeśli serwer czasu pomocniczego zostanie określony i ulegnie awarii lub jeśli opcja powrotu do domyślnych ustawień systemu operacyjnego zakończy
Networking_NtpOption_FallbackServerEnabled
się niepowodzeniem, system skontaktuje się z domyślnym źródłem czasu systemu operacyjnego prod.time.sphere.azure.net.- W następnym 24-godzinnym interwale synchronizacji systemu operacyjnego wróci i spróbuje wykonać zapytanie dotyczące serwera czasu podstawowego.
Jeśli określono Networking_NtpOption_FallbackServerDisabled, system operacyjny będzie nadal wykonywać zapytania dotyczące serwera podstawowego i pomocniczego co 15 sekund, dopóki nie zostanie pomyślnie zsynchronizowany z jednym z serwerów czasu.
Urządzenia wieloadresowe
Ustawienia serwera czasu są ustawieniem globalnym, a nie ustawieniem dla interfejsu. Jeśli urządzenie usługi Azure Sphere jest wieloadresowe, a oba interfejsy uzyskują informacje o serwerze NTP za pośrednictwem protokołu DHCP, ostatnio przetworzony zestaw opcji DHCP NTP wygrywa.
Przykład czasu systemowego
W przykładzie Czas systemowy pokazano, jak zarządzać czasem systemowym i korzystać ze sprzętowego rtc. Przykładowa aplikacja ustawia czas systemowy, a następnie używa clock_systohc
funkcji do synchronizowania czasu systemowego z rtC.
W projekcie SetTimeFromLocation pokazano, jak za pomocą wyszukiwania wstecznego adresu IP uzyskać informacje o lokalizacji, a następnie uzyskać czas lokalizacji i ustawić czas urządzenia. Ten projekt jest częścią galerii usługi Azure Sphere, kolekcji niezamierzonych skryptów, narzędzi i funkcji.
Przykład niestandardowego ntp
W przykładzie Custom NTP pokazano, jak skonfigurować usługę klienta NTP w celu uzyskania czasu z wielu źródeł.