Russian Qt Forum
Ноябрь 24, 2024, 20:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtSerialPort timerEvent() vs readyRead()  (Прочитано 5418 раз)
skandinavijos
Гость
« : Ноябрь 29, 2012, 18:58 »

Общайюсь с устройством, которое шлет 18 байт 200 раз в секунду. Логика приема данных грубо:
считать все, что пришло в буфер и если в буфере больше 18 байт, то выдрать из посылки нужную информацию и в очередь, которая потом в файл сохранится.

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

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Ноябрь 29, 2012, 20:50 »

1. ОС?
2. Код в студию.
Записан

ArchLinux x86_64 / Win10 64 bit
skandinavijos
Гость
« Ответ #2 : Ноябрь 30, 2012, 07:31 »

1) windows xp, qt 4.8.3, serialport последний, компилятор от 2010 студии
2) дело не в коде. можно просто qDebug() << "bida-bida"; написать в слот, с которым соединен readyRead(); и иногда эта фраза ни разу не выводится.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Ноябрь 30, 2012, 10:08 »

Хм. Не замечал такого.

Попробуй для тестов эту тулзу CpuUsabeTester
Повыводи в ней.


« Последнее редактирование: Ноябрь 30, 2012, 15:08 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
skandinavijos
Гость
« Ответ #4 : Ноябрь 30, 2012, 12:34 »

по ходу что-то нашел. хотя может я чего-то не знаю. по протоколу обмена 8 бит данных, в serialport в setdatabits логично пихал Data8, но portmonitor написал, что wordlength равен 7, поставил Data7 - стал писать 8.
Записан
skandinavijos
Гость
« Ответ #5 : Ноябрь 30, 2012, 12:40 »

ан нет, эту восьмерку другая софтина настроила, в общем пока рабочая версия в настройках порта
Записан
skandinavijos
Гость
« Ответ #6 : Ноябрь 30, 2012, 13:02 »

короче сам виноват. у меня в одном месте какого-то фига порт переоткрывался и настройки скидывались. всем спасибо. только один вопрос из чистого любопытства: при неправильных настройках данные иногда шли, а иногда нет. отчего это зависит?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Ноябрь 30, 2012, 15:10 »

Цитировать
при неправильных настройках данные иногда шли, а иногда нет. отчего это зависит?
От передаваемых значений, от контроля четности, от фаз луны.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.507 секунд. Запросов: 22.