Где-то тут встречал тему с подобным вопросом, но сейчас что-то не могу ее найти. Да и решения в ней не было, ибо обсуждение ушло в какое-то иное русло.
Стоит задача получать контроллером (Atmega8 / 32) строки по UART с последующим разбором согласно некоторым правилам. Если с посимвольным приемом все предельно ясно, то как обрабатывать строку, я что-то не соображу. Вернее соображаю, что ее нужно читать из кольцевого буфера, но что-то ничего не получается. Для работы с UART-ом использую довольно известную библиотеку от товарища Peter Fleury. Если кто не знает что это такое, то вкратце - это всего лишь пара-тройка функций по приему/передаче данных, два кольцевых буфера на прием/передачу задаваемой длины, да куча макросов для совместимости с разными моделями AVR8-контроллеров.
Если кто-то сталкивался с подобной задачей, да еще и используя выше указанную библиотеку - буду безмерно рад помощи. Если нужны будут косые примеры моих попыток реализации приема и обработки строки в коде, то выложу позже, поскольку сейчас не имею под рукой этих исходников.
Заголовок сообщения: Re: Обработка строк, полученных по UART
Добавлено: Сб ноя 05, 2016 07:14:32
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Строка в Си - это массив символов, с нулевым символом в конце. Ничего сверхъестественного. А обработка будет зависеть от тех неких правил, которые Вы не озвучили. Да и проблему, собственно, не описали. Что конкретно не получается ?
То, что строка в сях это массив байт с нулевым на конце - я прекрасно знаю. Ну а то, что нужно - это получить строку (a-f0-9) длиной 16 байт и распарсить в зависимости от ведущего байта. В строке содержатся различные цифро-буквенные параметры, которые в конце дополнены контрольной суммой из двух байт (как раз 15 и 16 байты). Соответственно - получаем эти 16 байт, считаем CRC от первых 14 и сравниваем с 2-мя последними. Если все благополучно - начинаем разбирать далее.
Вот такая задача. Свой код скину или сегодня ближе к ночи, или завтра. Как получится.
Так в чем проблема ? Ясна задача - ясна реализация. Тем более что строка фиксированной длины. Отделить одну строку от другой ? По стартовому символу, если такой предусмотрен протоколом. По тайм-ауту. Это, пожалуй, единственный выход в случае битой посылки - пропал символ или наоборот, лишний. Если ведущий тупо молотит не глядя - хана, ничем не поможешь. А если работа (полу-) дуплексом - ведущий ожидает ответа от ведомого - тот дает сигнал: сбой, повтори передачу. Но если прога ведущего (ПК) закрытая - не позволяет влезть - посоветовать что-либо трудно.
Проблема была в том, чтобы получить всю строку целиком. В общем, вот по этой ссылке отличный пример практически необходимой реализации. Чутку допилить и все.
Все равно спасибо за помощь. Ну а "протокол" там хитрый. И с той стороны не комп, а мозги спектрофотометра с каким-то не родным, экспериментальным блоком управления, по которому нет никакой инфы. И протокол этот был реверснут ручками.
Если с посимвольным приемом все предельно ясно, то как обрабатывать строку, я что-то не соображу. Вернее соображаю, что ее нужно читать из кольцевого буфера, но что-то ничего не получается.
Не пойму, что тут сложного. Проверяете, если в приемном буфере есть символ-ы, копируете в свой буфер. Набрали 16 символов проверили контрольную сумму, если ок вывод, если ошибка отбрасываете первый символ, а в конец добавляете один из очереди и снова проверка. Я тоже использую "Для работы с UART-ом использую довольно известную библиотеку от товарища Peter Fleury."
Заголовок сообщения: Re: Обработка строк, полученных по UART
Добавлено: Пн ноя 07, 2016 07:25:06
Мучитель микросхем
Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Ср янв 26, 2011 13:43:30 Сообщений: 414 Откуда: С того берега моря
Рейтинг сообщения:0
ТС, посмотрите книгу В.С. Прокопенко - программирование микроконтроллеров, у него там очень подробно расписанно по UART с примерами в т.ч с приемом строк.
_________________ - Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 185
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения