Informatyka i programowanieBłędy programistyczne, awarie i zaskakujące konsekwencje kodu

Starszy sygnał GPS liczy tygodnie tylko do 1023, więc co 19,7 roku licznik wraca do zera

Podstawowy cywilny sygnał GPS w starszym formacie koduje numer tygodnia w 10 bitach. Dziesięć bitów daje 1024 możliwe wartości, od 0 do 1023. Po 1024 tygodniach licznik zawija się do zera. Pierwszy rollover nastąpił w 1999 r., kolejny w kwietniu 2019 r. Starsze odbiorniki, które nie umiały ustalić właściwej epoki, mogły wtedy pokazywać błędną datę lub przestać poprawnie działać. To wyjątkowo czysty przykład rollover licznika zaprojektowanego dziesięciolecia przed realnym problemem. Sam sygnał działał zgodnie ze specyfikacją; zawodziła interpretacja epoki.

GPS przesyła numer tygodnia, nie pełny rok

Satelita wysyła informacje czasowe w kompaktowym formacie. W starszym LNAV numer tygodnia jest polem 10-bitowym. Odbiornik musi połączyć wartość 0–1023 z wiedzą o tym, w którym 19,7-letnim okresie się znajduje.

1024 to nie data, tylko limit reprezentacji

Po wartości 1023 kolejna liczba nie mieści się w dziesięciu bitach i wynik staje się 0. Sam sygnał jest zgodny ze specyfikacją; problem ma urządzenie, jeśli potraktuje `0` jako pierwszy tydzień 1980 r. zamiast początek kolejnej epoki.

Część urządzeń zawiodła dopiero w 2019 r.

GPS.gov informowało, że wiele starszych odbiorników miało problemy w drugim rolloverze. Niektóre ujawniały błąd kilka miesięcy wcześniej lub później, zależnie od sposobu, w jaki producent implementował własną epokę i korekty.

Nowe formaty zwiększyły licznik

Nowocześniejsze komunikaty CNAV wykorzystują 13-bitowy numer tygodnia, co przesuwa rollover o znacznie dłuższy okres. Typowa strategia naprawy ograniczonego licznika to zwiększenie pola — ale jeśli nowy limit nadal jest skończony, problem jedynie przesuwa się w czasie.

Urządzenia wbudowane żyją dłużej, niż zakłada projektant

Odbiornik GPS może działać w statku, systemie telemetrycznym lub infrastrukturze przez dziesięciolecia. Kod napisany w epoce, gdy 2019 wydawał się odległy, może nadal być eksploatowany. Embedded software bardzo często przeżywa założony cykl życia.

Rollover trzeba testować bez czekania 20 lat

Tester może zasymulować sygnał o numerze tygodnia 1023 i następnie 0. To prosta zasada: każda liczba monotonicznie rosnąca ma boundary. Wartość `max-1`, `max`, `0 po max` powinna być obowiązkowym przypadkiem testowym. Tego typu rollover szczególnie zagraża urządzeniom, które używają GPS jako źródła czasu dla innych usług. Nawet jeśli sama pozycja jest poprawna, błędna data może później uszkodzić logowanie, certyfikaty lub synchronizację.

Rozszerzenie pola nie usuwa problemu projektowego, tylko przesuwa jego horyzont

13-bitowy licznik tygodni w nowszych sygnałach GPS ma znacznie dłuższy okres niż 10-bitowy, ale nadal jest skończony. W praktyce taka granica może być wystarczająco odległa, by urządzenia nie przetrwały do rolloveru. Historia GPS pokazuje jednak, dlaczego trzeba jawnie dokumentować epoch i rollover semantics. Jeśli format danych trafia do standardu używanego przez lotnictwo, telekomunikację i energetykę, może żyć o wiele dłużej niż przewidywano. Najbardziej odporna implementacja nie zgaduje epoki wyłącznie na podstawie numeru tygodnia, lecz korzysta z dodatkowego kontekstu, aktualizacji firmware’u albo nowszych komunikatów z większym zakresem. Problem nie polega więc tylko na liczbie bitów; polega na tym, czy odbiorca umie rozpoznać, że ta sama wartość 0 może oznaczać różne momenty oddalone o dekady. Odbiornik powinien więc traktować numer tygodnia jako część większego kontekstu, a nie kompletną datę. Jeśli urządzenie zna przybliżony rok z pamięci RTC, konfiguracji albo wcześniejszej synchronizacji, może wybrać właściwą epokę zamiast przyjmować najstarszą możliwą. Producent powinien także jasno dokumentować moment rollover i testować go w symulatorze sygnału GPS. W urządzeniach infrastrukturalnych taki test jest znacznie tańszy niż odkrywanie problemu raz na dwadzieścia lat w produkcji. Gdy urządzenie jest częścią większego systemu, błędna data może następnie rozlać się dalej przez logi, harmonogramy i mechanizmy uwierzytelniania.

#10-bit#czas#embedded systems#GPS#licznik#rollover
Źródła i weryfikacja
Otrzymuj codzienne losowe ciekawostki