![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
borune |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 152 Регистрация: 1.1.2011 Пользователь №: 2314 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
День добрый, господа.
Вопрос такой. Есть порт с перемычкой между TxD и RxD. Пишу в порт данные и читаю их же. Использую QtSerialPort в полной аналогии с примером (terminal example). Проблема заключается в чтении данных. Есть слот, приконнекченный к сигналу readyRead() объекта. Когда в порте появляются данные, этот слот вызывается всякий раз, когда размер этих данных равен 8 Байтам. Например, если размер считываемых данных составляет 14 Байт, слот вызывается 2 раза, если 27 Байт - 4 раза, 248 Байт - 31 раз. Т.е. порт ведет себя так, как будто бы размер буфера равен 8. Суть проблемы в том, что из-за вышеперечисленного невозможно отследить момент, когда все доступные данные считаны из порта: Раскрывающийся текст
UPD Если добавить небольшой лок перед чтением, т.е. Раскрывающийся текст
Я ничего не понимаю. Сообщение отредактировал borune - 20.11.2015, 16:42 |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
условие if(serial->bytesAvailable()==0) по непонятной для меня причине оказывается верно Всё верно, ты их строкой выше все вычитал (а остальное ещё не пришло, если вообще должно было).т.е. метод QtSerialPort ::bytesAvailable() обязан вернуть столько же сколько вернёт QtSerialPort ::readAll().size() Обычно используют либо таймаут по приёму, либо управление потоком (неважно каким, например, передавая сигнальные/флаговые байты в начале и конце посылки) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.4.2025, 12:52 |