Страница 1 из 1

Обработка строк, полученных по UART

Добавлено: Пт ноя 04, 2016 23:33:11
good.bad
Добрый день уважаемые!

Где-то тут встречал тему с подобным вопросом, но сейчас что-то не могу ее найти. Да и решения в ней не было, ибо обсуждение ушло в какое-то иное русло.

Стоит задача получать контроллером (Atmega8 / 32) строки по UART с последующим разбором согласно некоторым правилам. Если с посимвольным приемом все предельно ясно, то как обрабатывать строку, я что-то не соображу. Вернее соображаю, что ее нужно читать из кольцевого буфера, но что-то ничего не получается. Для работы с UART-ом использую довольно известную библиотеку от товарища Peter Fleury. Если кто не знает что это такое, то вкратце - это всего лишь пара-тройка функций по приему/передаче данных, два кольцевых буфера на прием/передачу задаваемой длины, да куча макросов для совместимости с разными моделями AVR8-контроллеров.

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

Re: Обработка строк, полученных по UART

Добавлено: Сб ноя 05, 2016 07:14:32
Аlex
Строка в Си - это массив символов, с нулевым символом в конце. Ничего сверхъестественного.
А обработка будет зависеть от тех неких правил, которые Вы не озвучили. Да и проблему, собственно, не описали. Что конкретно не получается ?

Re: Обработка строк, полученных по UART

Добавлено: Сб ноя 05, 2016 07:54:10
good.bad
То, что строка в сях это массив байт с нулевым на конце - я прекрасно знаю. Ну а то, что нужно - это получить строку (a-f0-9) длиной 16 байт и распарсить в зависимости от ведущего байта. В строке содержатся различные цифро-буквенные параметры, которые в конце дополнены контрольной суммой из двух байт (как раз 15 и 16 байты). Соответственно - получаем эти 16 байт, считаем CRC от первых 14 и сравниваем с 2-мя последними. Если все благополучно - начинаем разбирать далее.

Вот такая задача. Свой код скину или сегодня ближе к ночи, или завтра. Как получится.

Re: Обработка строк, полученных по UART

Добавлено: Сб ноя 05, 2016 11:49:35
Jack_A
Так в чем проблема ? Ясна задача - ясна реализация. Тем более что строка фиксированной длины. Отделить одну строку от другой ? По стартовому символу, если такой предусмотрен протоколом. По тайм-ауту. Это, пожалуй, единственный выход в случае битой посылки - пропал символ или наоборот, лишний. Если ведущий тупо молотит не глядя - хана, ничем не поможешь. А если работа (полу-) дуплексом - ведущий ожидает ответа от ведомого - тот дает сигнал: сбой, повтори передачу. Но если прога ведущего (ПК) закрытая - не позволяет влезть - посоветовать что-либо трудно.

Re: Обработка строк, полученных по UART

Добавлено: Сб ноя 05, 2016 12:05:26
good.bad
Проблема была в том, чтобы получить всю строку целиком. В общем, вот по этой ссылке отличный пример практически необходимой реализации. Чутку допилить и все.

Все равно спасибо за помощь. Ну а "протокол" там хитрый. И с той стороны не комп, а мозги спектрофотометра с каким-то не родным, экспериментальным блоком управления, по которому нет никакой инфы. И протокол этот был реверснут ручками.

Re: Обработка строк, полученных по UART

Добавлено: Вс ноя 06, 2016 09:42:35
Jack_A
Тогда - успехов. Получится - поделитесь с народом.

Re: Обработка строк, полученных по UART

Добавлено: Вс ноя 06, 2016 22:04:34
codenamehawk
good.bad писал(а): Если с посимвольным приемом все предельно ясно, то как обрабатывать строку, я что-то не соображу. Вернее соображаю, что ее нужно читать из кольцевого буфера, но что-то ничего не получается.
Не пойму, что тут сложного.
Проверяете, если в приемном буфере есть символ-ы, копируете в свой буфер.
Набрали 16 символов проверили контрольную сумму, если ок вывод, если ошибка отбрасываете первый символ, а в конец добавляете один из очереди и снова проверка.
Я тоже использую "Для работы с UART-ом использую довольно известную библиотеку от товарища Peter Fleury."

Re: Обработка строк, полученных по UART

Добавлено: Пн ноя 07, 2016 07:25:06
Jman
ТС, посмотрите книгу В.С. Прокопенко - программирование микроконтроллеров, у него там очень подробно расписанно по UART с примерами в т.ч с приемом строк.