Я анализирую данные NMEA GPS с устройства, которое отправляет метки времени без миллисекунд. Насколько я слышал, эти устройства будут использовать определенную точку запуска при отправке предложения с отметкой времени .000 - afaik $ в предложении GGA.
Итак, я разбираю предложение GGA и беру временную метку при получении $ (я компенсирую любые дополнительные символы, читаемые в той же операции с использованием скорости передачи последовательного порта).
Из этой информации я вычисляю смещение для корректировки системного времени, но когда я сравниваю время, установленное для некоторых серверов NTP, я получу постоянную разницу в 250 мс - когда я исправляю это вручную, я нахожусь в пределах отклонения 20 мс, что нормально для моего приложения.
Но, конечно, я не уверен, откуда это смещение, и является ли оно каким-то специфическим для используемой GPS-мыши или моей системы. Я использую неправильный символ $, или кто-то знает, как именно это должно быть обработано? Я знаю, что этот вопрос очень нечеткий, но любые намеки на то, что может вызвать это смещение, были бы очень полезны!
Вот некоторые примеры данных с моего устройства, с символом $, который я выберу в качестве временного смещения:
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003538.000,A,5046.8555,N,00606.2913,E,0.00,22.37,160209,,,A*58
-> $ <- GPGGA,003539.000,5046.8549,N,00606.2922,E,1,07,1.5,249.9,M,47.6,M,,0000*5C
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPGSV,3,1,10,09,77,107,17,12,63,243,30,05,51,249,16,14,26,315,20*7E
$GPGSV,3,2,10,30,24,246,25,17,23,045,22,15,15,170,16,22,14,274,24*7E
$GPGSV,3,3,10,04,08,092,22,18,07,243,22*74
$GPRMC,003539.000,A,5046.8549,N,00606.2922,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003540.000,5046.8536,N,00606.2935,E,1,07,1.5,249.0,M,47.6,M,,0000*55
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003540.000,A,5046.8536,N,00606.2935,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003541.000,5046.8521,N,00606.2948,E,1,07,1.5,247.8,M,47.6,M,,0000*5E