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

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, nezachová se při výpadku napájení zařízení. Pokud chcete zachovat dobu během výpadku 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 nastavení RTC do manifestu aplikace.

Soubory hlaviček

Do projektu zahrňte hlavičku rtc:

 #include <applibs\rtc.h>

Nastavení manifestu aplikace

Pokud chcete používat rozhraní RTC a standard clock API, musíte do manifestu SystemTime aplikace přidat schopnost 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

Pokud chcete nastavit systémový čas, zavolejte standardní clock_settime funkci.

Synchronizace systémového času s rtc

Když je nastavený systémový čas, nezachová se, když zařízení ztratí napájení. Pokud chcete zachovat dobu během výpadku napájení, zavolejte funkci applibs clock_systohc . Při clock_systohc se systémový čas nasdílí 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 se čas UTC, když je zařízení připojeno k internetu. Klientskou službu NTP můžete zakázat. To však může způsobit selhání cloudových aktualizací 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é aplikací můžete změnit zavolá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 polohu a nastavit čas zařízení. Tento projekt je součástí galerie Azure Sphere, kolekce neudržovaný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 s letním časem nebo bez . Příklady: "EST+5", "EST+5EDT". Tato hodnota je kladná, pokud je místní časové pásmo západně od základního poledníku, a záporné, pokud je východní.
  • Nemůžete zadat datum a čas, kdy má DST platit.
  • Nemůžete 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 nastavení při restartování zařízení odvolat.

Určení serveru NTP

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

Klient NTP se pokusí synchronizovat čas každých 15 sekund, dokud nedojde k úspěšné synchronizaci. Po úspěšné synchronizaci času se pokusí znovu synchronizovat čas každých 24 hodin. Když Azure Sphere provádí synchronizaci času, nejprve použije náhodný zdrojový port klienta UDP mezi 32678 a 61000. Pokud tento port selže, Azure Sphere se pak 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 funkce Networking_TimeSync_EnableCustomNTP nebo Networking_TimeSync_EnableDefaultNtp.

Pokud je pro zdroje časových serverů nakonfigurované použití DHCP, Azure Sphere 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 priority. Ty se budou považovat za primární a sekundární server.

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

Nouzové

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

  • 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 zadaný).

  • Pokud je zadán sekundární časový server a selže nebo pokud možnost návratu k výchozímu nastavení operačního systému prostřednictvím Networking_NtpOption_FallbackServerEnabled selže, systém pak bude kontaktovat výchozí zdroj času operačního systému prod.time.sphere.azure.net.

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

Zařízení s více domy

Nastavení časového serveru je globální nastavení, nikoli nastavení pro jednotlivé rozhraní. Pokud je zařízení Azure Sphere s více adresami a obě rozhraní získají informace o serveru NTP prostřednictvím protokolu DHCP, vyhraje naposledy zpracovaná sada možností DHCP NTP.

Ukázka systémového času

Ukázka systémového času ukazuje, jak spravovat systémový čas a používat hardwarovou verzi RTC. Ukázková aplikace nastaví systémový čas a pak pomocí clock_systohc funkce synchronizuje systémový čas s rtc.

Projekt SetTimeFromLocation ukazuje, jak pomocí zpětného vyhledávání IP získat informace o poloze, pak získat čas pro polohu a nastavit čas zařízení. Tento projekt je součástí galerie Azure Sphere, kolekce neudržovaný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ů.