Sdílet prostřednictvím


Správa systémového času a RTC v aplikacích vysoké úrovně

Důležité

Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.

RtC (hodiny v reálném čase) slouží k udržování času na zařízení Azure Sphere, když zařízení ztratí napájení a po restartování zařízení nemá přístup k síťovému připojení. To umožňuje zařízení udržovat čas během výpadku napájení, i když nemá přístup k serveru NTP.

Pokud nastavíte systémový čas, neudržuje se, když zařízení ztratí napájení. Pokud chcete zachovat čas během ztráty napájení, musíte volat funkci Applibs clock_systohc. Při zavolání clock_systohc se systémový čas odešle do rtC.

Požadavky na RTC

Aplikace, které používají rtC, musí obsahovat příslušné soubory hlaviček a přidat do manifestu aplikace nastavení RTC.

Soubory hlaviček

Do projektu zahrňte hlavičku rtc:

 #include <applibs\rtc.h>

Nastavení manifestu aplikace

Pokud chcete používat rozhraní RTC a standardní rozhraní API pro hodiny, musíte do manifestu aplikace přidat SystemTime funkci aplikace a pak nastavit hodnotu na true. Manifest aplikace Azure Sphere obsahuje další podrobnosti o manifestu aplikace.

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

Získání systémového času

Pokud chcete získat systémový čas, zavolejte standardní clock_gettime funkci.

Nastavení systémového času

Chcete-li nastavit systémový čas, zavolejte standardní clock_settime funkci.

Synchronizace systémového času s rtC

Když je nastavený systémový čas, neudržuje se, když zařízení ztratí napájení. Pokud chcete zachovat čas během ztráty napájení, zavolejte clock_systohc funkci Applibs. Pokud se clock_systohc nazývá systémový čas, odešle se do rtC.

Konfigurace klientské služby NTP

Klientská služba NTP je ve výchozím nastavení povolená. Pokud nastavíte systémový čas, když je povolená klientská služba NTP, přepíše čas UTC, kdy má zařízení připojení k internetu. Klientskou službu NTP můžete zakázat. To ale může způsobit selhání aktualizací cloudu na zařízení, pokud je rozdíl mezi systémovým časem a časem serveru NTP příliš velký.

Nastavení časového pásma

Systémový čas a čas RTC jsou uloženy v GMT/UTC. Časové pásmo používané vaší aplikací můžete změnit voláním setenv funkce pro aktualizaci proměnné prostředí TZ a následným voláním tzset funkce.

Projekt SetTimeFromLocation ukazuje, jak pomocí zpětného vyhledávání IP získat informace o poloze, pak získat čas pro umístění a nastavit čas zařízení. Tento projekt je součástí galerie Azure Sphere, kolekce nepotřebných skriptů, nástrojů a funkcí.

Operační systém Azure Sphere podporuje některé, ale ne všechny možné formáty pro proměnnou prostředí TZ:

  • Aktuální časové pásmo můžete nastavit pomocí letního času (DST) nebo bez. Příklady: EST+5, EST+5EDT. Tato hodnota je kladná, pokud je místní časové pásmo západně od Prime Meridian a záporné, pokud je východní.
  • Datum a čas, kdy se má DST projevit, nemůžete zadat.
  • Nelze zadat soubor nebo databázi časového pásma.

Pokud chcete zachovat nastavení časového pásma během výpadku napájení, můžete pomocí proměnlivého úložiště uložit časové pásmo do trvalého úložiště a pak toto nastavení odvolat při restartování zařízení.

Určení serveru NTP

Klientská služba NTP je možné nakonfigurovat tak, aby získala čas z více zdrojů. Výchozí zdroj času je prod.time.sphere.azure.net, jak je uvedeno v požadavcích na síť operačního systému Azure Sphere.

Klient NTP se pokusí synchronizovat každých 15 sekund, dokud nedojde k úspěšné synchronizaci. Po úspěšné synchronizaci času se pokusí čas znovu synchronizovat jednou za 24 hodin. Když Azure Sphere provádí synchronizaci času, nejprve používá náhodný zdrojový port klienta UDP mezi 32678-61000. Pokud tento port selže, Azure Sphere se pokusí použít port 124 jako zdrojový port klienta UDP.

Můžete určit, že systém získá čas ze serveru DHCP, nebo můžete určit zdroj času v aplikaci prostřednictvím Networking_TimeSync_EnableCustomNTP nebo Networking_TimeSync_EnableDefaultNTP.

Pokud je služba Azure Sphere nakonfigurovaná tak, aby používala protokol DHCP pro zdroje časových serverů, zpracuje možnost DHCP 042 a klient NTP zpracuje pouze první dvě položky odeslané v možnosti DHCP, které by měly být uvedeny v pořadí podle preference. Budou se považovat za primární server a sekundární server.

Časový server můžete také nakonfigurovat prostřednictvím Networking_TimeSync_EnableCustomNTP , pokud chcete prostřednictvím aplikace zadat primární a sekundární časový server. Maximální délka pro každý plně kvalifikovaný název domény (FQDN) serveru je 255 znaků.

Náhradní téma

  • Pokud je klient NTP nakonfigurován pro získání časových serverů přes PROTOKOL DHCP nebo rozhraní API, je vyžadován další parametr pro určení záložního chování.

  • Klient se nejprve pokusí kontaktovat primární časový server. Pokud se klientovi nepodaří získat platnou odpověď časového serveru, zkusí sekundární časový server (pokud je zadán).

  • Pokud je zadaný sekundární časový server a selže nebo pokud se možnost pro návrat k výchozímu nastavení operačního systému přes Networking_NtpOption_FallbackServerEnabled nezdaří, systém kontaktuje výchozí zdroj času operačního systému prod.time.sphere.azure.net.

    • V následujícím 24hodinovém intervalu synchronizace se operační systém vrátí a pokusí se dotazovat primárního časového serveru.
  • Pokud jste zadali Networking_NtpOption_FallbackServerDisabled, operační systém bude každých 15 sekund dotazovat primární a sekundární server, dokud se úspěšně nesynchronuje s jedním z časových serverů.

Zařízení s více zařízeními

Nastavení časového serveru je globální nastavení, nikoli nastavení pro každé rozhraní. Pokud je zařízení Azure Sphere multihomed a obě rozhraní získávají informace o serveru NTP prostřednictvím protokolu DHCP, naposledy zpracovaná sada možností DHCP NTP vyhraje.

Ukázka systémového času

Ukázka systémového času ukazuje, jak spravovat systémový čas a používat hardware RTC. Ukázková aplikace nastaví systémový čas a pak použije clock_systohc funkci k synchronizaci systémového času s RTC.

Projekt SetTimeFromLocation ukazuje, jak pomocí zpětného vyhledávání IP získat informace o poloze, pak získat čas pro umístění a nastavit čas zařízení. Tento projekt je součástí galerie Azure Sphere, kolekce nepotřebných skriptů, nástrojů a funkcí.

Ukázka vlastního protokolu NTP

Ukázka vlastního protokolu NTP ukazuje, jak nakonfigurovat klientskou službu NTP tak, aby získala čas z více zdrojů.