Проблема есть. Она в том, что хромой на костылях не должен изображать из себя учителя танцев
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено GPS 19 апреля 2005 г. 23:34
В ответ на: нет проблемы..проблема разделять плевки (вар 1 и 2) отправлено ы 19 апреля 2005 г. 22:09

ы:
С твоей "квалификацией" (ее ты уже неоднократно здесь демонстрировал - вспомнить хотя бы твою дремучесть при обсуждении многоканального Software UART) следует не учить, а учиться. То, что ты сейчас наболтал - это недостойная любительщина низкого халтурного пошиба. Не вводи человека в заблуждение, изображая из себя всезнайку!

ikX:
NMEA - это префиксный формат, можно даже не называть его "протоколом". Каждый тип сообщения начинается с маркер-символа ($), двухсимвольного идентификатора типа источника (GP для GPS) и префикса сообщения, состоящего из нескольких (чаще - трех) ASCII-символов, например, $GPGLL. Дальше идут разделенные запятыми значения зарактерных для данного сообщения полей данных, затем символ (*), контрольная сумма в виде двух HEX-символов (например, А8) и ASCII-символы конца строки [CR][LF]. Между ($) и (*) может быть не более 74 символов (байт).

Вот общий пример:$IDMSG,D1,D2,D3,D4,.......,Dn*CS[CR][LF]
Вот пример сообщения GLL в общем виде: $GPGLL,m1,c1,m2,c2,m3,c3*CS[CR][LF]
Вот пример реального сообщения GLL: $GPGLL,3722.414292,N,12159.852825,W,202556.00,A*12

Поля данных могут быть представлены различными форматами и типами - например, знаковое/беззнаковое, целое/дробное число различной разрядности, или просто символ. Поле имеет строгое положение в структуре конкретного сообщения, длина же любого поля может быть различной, вплоть до нулевой - в этом случае разделяющие поля запятые будут идти подряд, т.е. поле "пустое".

Порядок следования сообщений NMEA, непрерывность их выдачи во времени и вообще обязательность их появления на выходе приемника практически не регламентируется и не гарантируется. Никто не запрещает велеть приемнику выдавать GGA и GLL 1 раз в секунду, ZDA - раз в 5 секунд, а RMC - раз в минуту, например. Мало того, то же сообщение ZDA у многих приемников вообще не будет выдаваться до First Fix (первого определения положения и времени), а при потере спутников может стать пустым. Прием служебных данных (альманах, эфемериды и т.д.), производимый приемником через определенные интервалы времени, также может устроить нехилый таймаут всем сообщениям.

Если послушать советов хромого танцора на букву "ы" и отплясывать от таймаута либо от "первого сообщения", то как раз и получится каша "Любительская", из ржавого топора и на мутной водичке. Если ТАКОЕ нравится кушать - тогда вперед и с песнями, только надо хорошенько запастись средствами от живота - потому как мало не покажется. Если же требуется безупречный прием данных в правильные переменные для обработки, тогда делать нужно по-человечески, а не через букву "ы".
Разбор (парсинг) ASCII-строк - дело простое, многократно и успешно решавшееся в разнообразных целях. В случае NMEA можно в зависимости от ресурсов МК и сложности последующей обработки применять разные методы. Если не жалко RAM, то в ISR приема с UART можно просто идентифицировать заголовок сообщения (например, $GPGLL), сбрасывать указатель буфера сообщения по завершению идентификации и грузить все сообщение в этот буфер, а по концу строки выставлять фону флажок готовности сообщения. Фон (main) может дальше проверять контрольную сумму, выбирать нужные поля и проводить их обработку. Если RAM мало, то можно немного догрузить ISR, заставив ее проводить парсинг "на лету" и распихивать отобранные поля в исходном (принятом) виде в более компактные буфера. Если же при этом есть четкая гарантия того, что длинная ISR не вызовет ошибок приема, то можно и преобразование ASCII-bin делать внутри ISR. Контрольную сумму, кстати, сам бог велел делать на лету - приняв очередной байт, XORить его с предыдущим, и так до конца приема.

В общем, тебе выбирать - в зависимости от возможностей, требований и квалификации. Только не учись танцам у хромых и безногих - научат такому, что девушки могут понять неправильно :)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru