Russian Qt Forum

Qt => Общие вопросы => Тема начата: skandinavijos от Ноябрь 29, 2012, 18:58



Название: QtSerialPort timerEvent() vs readyRead()
Отправлено: skandinavijos от Ноябрь 29, 2012, 18:58
Общайюсь с устройством, которое шлет 18 байт 200 раз в секунду. Логика приема данных грубо:
считать все, что пришло в буфер и если в буфере больше 18 байт, то выдрать из посылки нужную информацию и в очередь, которая потом в файл сохранится.

Так вот, если вешать этот код на сигнал readyRead() (срабатывает когда в буфере что-то есть) класса SerialPort, то иногда этот сигнал не срабатывает вообще, при этом данные идут (проверял другой программой), а если этот же код засунуть в timerEvent с интервалом в 5мс родительского класса, то вроде бы такого нет, во всяком случае ни разу не повтроилось. Вопрос: почему так?


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: kuzulis от Ноябрь 29, 2012, 20:50
1. ОС?
2. Код в студию.


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: skandinavijos от Ноябрь 30, 2012, 07:31
1) windows xp, qt 4.8.3, serialport последний, компилятор от 2010 студии
2) дело не в коде. можно просто qDebug() << "bida-bida"; написать в слот, с которым соединен readyRead(); и иногда эта фраза ни разу не выводится.


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: kuzulis от Ноябрь 30, 2012, 10:08
Хм. Не замечал такого.

Попробуй для тестов эту тулзу CpuUsabeTester  (https://bugreports.qt-project.org/secure/attachment/29939/CpuUsageTester.zip)
Повыводи в ней.




Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: skandinavijos от Ноябрь 30, 2012, 12:34
по ходу что-то нашел. хотя может я чего-то не знаю. по протоколу обмена 8 бит данных, в serialport в setdatabits логично пихал Data8, но portmonitor написал, что wordlength равен 7, поставил Data7 - стал писать 8.


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: skandinavijos от Ноябрь 30, 2012, 12:40
ан нет, эту восьмерку другая софтина настроила, в общем пока рабочая версия в настройках порта


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: skandinavijos от Ноябрь 30, 2012, 13:02
короче сам виноват. у меня в одном месте какого-то фига порт переоткрывался и настройки скидывались. всем спасибо. только один вопрос из чистого любопытства: при неправильных настройках данные иногда шли, а иногда нет. отчего это зависит?


Название: Re: QtSerialPort timerEvent() vs readyRead()
Отправлено: kuzulis от Ноябрь 30, 2012, 15:10
Цитировать
при неправильных настройках данные иногда шли, а иногда нет. отчего это зависит?
От передаваемых значений, от контроля четности, от фаз луны.