![]() |
|
![]() ![]() ![]() |
|
daemonaz |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
||||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Ну да. Сначала рисуешь на бумажке, какие должны быть состояния, переходы, что должно выполняться в каждом состоянии и т.п. а потом реализуеш на QStateMachine, сигналах/слотах.
Вот, раз пошла такая пьянка, советую еще это почитать: http://www.eventhelix.com/realtimemantra/p...tocol_layer.htm Может поможет в осмыслении глубины глубин. ![]() Это сообщение отредактировал(а) kuzulis - 14.1.2012, 13:13 |
|||
|
||||
daemonaz |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Вопрос к kuzulis по поводу библиотеки, я хочу вывести принятые данные на QPlainTextEdit, делаю с помошью сигнала readyRead()
Почему то выводится не все содержимое, а кусками, кстати с QExtSerial у меня такого не было. Хотелось бы понять где ошибка? Может не успевает обрабатывать, нужен поток?
|
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Сигнал readyRead() сигнализирует о том, что имеется некоторое количество входящих данных, доступных для чтения.
Минимальное количество от 1 байта и больше. Внутри, в классе SerialPort, при приходе данных, автоматически вызывается нативная (платформо-зависимая) функция чтения данных, которая читает доступые в текущий момент данные в буфере UART и помещает их в кольцевой буфер класса. При открытии порта, его дескриптор настраивается таким образом, чтобы все функции чтения возвращались немедленно, т.е. читают то, что есть (или то чего нет) и сразу возвращают управление, не ожидая пока придут следующие данные. Таким образом, если передаешь, скажем, 100 байт, то оно будет читать это порциями, по N байт (где N - кол-во байт, успевших придти в UART). Из этого всего следует, что метод readAll() вернет всё, что есть в внутреннем буфере класса!!! т.е. это не значит, что вызвав readAll() ты получишь весь пакет данных целиком! Это не ошибка, так и должно быть, всё успевает обработать, и поток не нужен (хотя, по хорошему нужен, т.к. в текущей реализации при интенсивном обмене данными будет фризить GUI под виндой - да есть такой косячок). Как сделать так, чтобы принимался весь пакет - тебе было дано решение выше, на первых страницах твоей темы. Это сообщение отредактировал(а) kuzulis - 25.1.2012, 10:24 |
|||
|
||||
daemonaz |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
kuzulis, спасибо! на прием данных наконец-то вынес в поток, но проблема оставалась до сих пор, пока вместо readAll не взял read(count), все заработало.. Специфичная такая функция..
![]() |
|||
|
||||
kuzulis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Да и read(count) аналогично работает: если запрашиваешь кол-во данных, превышающее их реальное текущее значение в буфере - то сразу вернет только то что в буфере, а не count, также не будет ждать пока набегут все count. В принципе, readAll() и read(<стопицотмильеновбайт>) эквивалентны, за исключением того, что в readAll() происходит некий оверхед и она чуть медленнее работает. |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
А есть ли смысл писать свой xmodem, а не использовать бинарник sx из lrzsz?
|
|||
|
||||
daemonaz |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
tzirechnoy, я рад бы использовать их, сам пишу под Линух, но юзеры хотят на windows only..
|
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Вы так говорите, будто lrzsz под windows мало.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |