Вот за кружечкой чая можно спокойно теперь посидеть и поговорить.
Polf, наш диалог у меня вызывает ассоциацию, как вот если бы два человека обсуждали, скажем, дом и вот один бы упорно пытался доказать, что дом зелёный, а второй уверял бы, что он квадратный
Вот мы так и беседуем....
Так, давайте сначала к практике. Отделим всё же квадратное от зелёного, так проще будет. Значит смотрите, $GPRMC, $GPGGA, $GPGSA- это форматы, каждая такая строка с тем или иным заголовком, это формат NMEA, соответственно строка с заголовком $GP... имеет конкретную структуру и конкретный набор данных той или иной длинны, как и следующая, что собственно отделяет их друг от друга, проще говоря они различны по формату. Это квадратное!!!! Т.е. формат- это формат, те или иные значения- это уже значения и это зелёное!!!!! Не путаем опять таки формат и значения!!!!
Теперь, давайте взглянем на значения. По На 5- й странице форума Вы выкладывали лог снятый с помощью терминалки с GPS модуля. Взглянем на него более конкретно, так сказать пристальным взглядом и что мы имеем, разумеется не интересующие нас строки я пропустил и вот:
24-08-17, 14:48:08, 32 -> $GPRMC,
124812.00,V,,,,,,,,,,N*71
24-08-17, 14:48:08, 40 -> $GPGGA,
124812.00,,,,,0,00,99.99,,,,,,*6A
24-08-17, 14:48:08, 32 -> $GPRMC,
124813.00,V,,,,,,,,,,N*70
24-08-17, 14:48:09, 40 -> $GPGGA,
124813.00,,,,,0,00,99.99,,,,,,*6B
24-08-17, 14:48:09, 32 -> $GPRMC,
124814.00,V,,,,,,,,,,N*77
24-08-17, 14:48:10, 40 -> $GPGGA,
124814.00,,,,,0,00,99.99,,,,,,*6C
Соответственно, как мы видим,
значения времени в каждом
блоке данных, которые приходят 1 разв секунду от модуля совершенно одинаковые. О чём собственно я и пытаюсь Вам донести. Ещё раз, из строки какого
формата, вы будите брать
значения времени- совершенно без разницы, они
одинаковые. Это что касается блока данных и значений.
Теперь перейдём к формату, Вы сказали, что я усложнил сам себе задачу выбрав не ту строку и т.д. и т.п. НЕТ! Не усложнил, упростил. Почему у Вас конструкция, ссылку на которую Вы привели выше работает секунда в секунду мы выясним позже.
Я использую строку GPRMC, мне так удобнее, мне так привычнее. Скажу больше, GPRMC является неким "ходовым" форматом т.к. в строке содержаться все данные на все случаи жизни, тут тебе и время и координаты и высота и скорость и всё что хочешь И! указатель на достоверность данных "А". Достоверны они тогда, когда будет найдено не менее 3- х спутников для 2Д и не менее 5 для 3Д (могу с колл- вом напутать, но не суть). Когда мы видим 1 спутник- у нас есть время, но оно не достоверно, когда мы видим 3 спутника, у нас время достоверно, а указатель с буквы V изменится на букву А. При чём тут это спросите Вы?
Отвечаю!
Если мы будем использовать формат GPGGA, то для понимания достоверности данных, нам требуется извлекать из строки колл- во используемых (найденных) спутников, а после сравнивать это колл- во с константой, соответственно меньше 3 - не достоверно и т.д. Удобно это делать с точки зрения программирования? Отвечаю- нет! Это не удобно и не правильно при наличии других вариантов! Т.к. парсинг строки не может проходить по статичным номерам индекса массива содержащего строку в виду динамической длинны массива. Соответственно в этом случае мы вынуждены ползать по всем индексам, отсчитывать запятые, забирать значения между запятыми, преобразовывать это всё в числовые выражения, потом сравнивать....., это не сложно, больше мутороно, просто зачем усложнять себе жизнь, если, в случае с GPRMC это бы выглядело так:
Функция поиска необходимого нам сочетания байт
unsigned char answer_contains( char flash * s ) {
if ( strstrf( buffer, s ) == 0 ) return 0;
return 1;
}конкретное условие, если мы нашли в строке сочетание ",А,", то данные достоверны, разбираем её смело
if ( answer_contains( ",A," ) ) {.......} если не то делаем то- то...
else {.......}Т.е. Вы должны понять, что часы, ходят точно не потому что используется формат GPGGA, а потому что время извлекается и отображается тогда, когда будет найдено 3 и более спутников, а вот тут внимание! Это равносильно тому же, что и использовать указатель "А"!!!! Само же значение времени, что в GPGGA, что в GPRMC
ОДИНАКОВО! Только использовать указатель намного проще, чем сначала парсить всю строку, извлекать значения и т.д. Почему я не использую указатель см. выше.
Что касается DS! Не, не катит! Собирал и не одни. Всё равно рано или поздно прилично начинают спешить/отставать, их надо устанавливать, корректировать, не, это не то. Как я писал выше, меня вообще не теребят +-пару секунд спешки или отставания, просто я выбрал более быструю синхронизацию, но пожертвовал максимальной точностью, можно сделать наоборот, никто же не против.

И вообще, много слов! Проведите эксперимент.
Запустите модуль и в терминале смотрите на строку $GPGGA и $GPRMC, параллельно поглядывая на некий эталон. Так вот как только будет пойман первый спутник, что в GPGGA , что GPRMC будет одно и тоже значение времени, но с отклонением от эталона, как только в GPRMC указатель V сменится на А, то время сойдётся с эталоном. При этом опять таки, что в GPGGA , что в GPRMC оно будет одинаковым
