Название: 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 Цитировать при неправильных настройках данные иногда шли, а иногда нет. отчего это зависит? От передаваемых значений, от контроля четности, от фаз луны. |