Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > [Qt 3.3] Не работает чтение из последоват. порта |
Автор: Tiffany 14.5.2008, 12:43 | ||
Не могу понять в чем дело. Смысл таков - надо послать одному устройству команду через послед. порт и получить ответ от устройства. Команда посылается и устройство её норм обрабатывает, потом оно должно отослать ответ и я его должна прочитать. Но при чтении (разными методами) прога либо виснет, либо вылетает, либо функция чтения возвращает ошибку.
В строке "f1.readBlock(buf, sizeof(buf));" пробовала и по другому: "read(f1.handle(), buf, sizeof(buf))" - тотже результат; "buf[0]=f1.getch()" - возвращает "-1". ![]() Есть какие-нибудь мысли? ![]() P. S. Правда в другой программе у мну норм читались ответы, тока они шли от другого ПК. Это было что-то типа миничата через послед. порты =) Настройки порта там конечно были другие, но и в этой программе (с устройством) я пыталась сделать следующий финт ушами - пишим команды с теми настройками что указаны вверху, а когда надо получать ответ, запускаем другой поток для чтения который устанавливает те настройки, с которыми работало чтение в чате, читает (должен был бы) ответ и возвращает обратно настройки для записи ![]() Но и в таком варианте тот же эффект =( Мож дело и не в настройках порта... хз ... ![]() |
Автор: JackYF 14.5.2008, 14:51 |
Tiffany, а Qt здесь при чём? Тебе не в юникс-программирование случайно? |
Автор: chaos 15.5.2008, 08:51 | ||
Tiffany а почему ты юзаешь QFile ? разве QFile использует низкоуровневые функции open, close, read, write ? Даже если это так, то все равно опастно этим пользоваться - трроли однажды изменят внутреннию реализацию QFile на какие-нибудь стримы и все. мой тебе совет исполльзовать функции приведенные выше. ЗЫ чуть-чтуь бы еще изменил код твой, те настройку порта
|
Автор: Tiffany 15.5.2008, 13:11 | ||
chaos, угу, терь вроде все норм с такими настройками (правда проверить на устройстве смогу наверно только завтра, а сейчас проверяла между 2я компами - работает, и судя по com-монитору - настройки те что надо). Завтра узнаю наверняка. А QFile использовала потому, что обычный open тупо вылетает с ошибкой ![]() ![]() А кстати... я же QFile использовала, только чтобы открыть порт, а читать\писать то всеравно можно обычными read\write:
Это должно быть равносильно использованию этих функций с дескриптором полученным от open. |
Автор: chaos 16.5.2008, 08:04 | ||||
1. c какой ошибкой 2. Если QFile обертка для функция опен, клосе, рид, врайт то да, "можно" использовать, но я бы не стал ![]() |
Автор: Tiffany 16.5.2008, 08:33 | ||
chaos,
Та вот уже и непомню с какой. Помню что просто закрывается окно на "open" молча и все. Ну уже не суть. Пока все работает. Проблема с чтением решилась тоже довольно неадекватными действиями ![]() ![]() |
Автор: Ken 17.5.2008, 18:25 | ||
Там у вас стоит опция:
В документации написано: In canonical mode: * Input is made available line by line. An input line is available when one of the line delimiters is typed (NL, EOL, EOL2; or EOF at the start of line). Except in the case of EOF, the line delimiter is included in the buffer returned by read(2). Т.е. пока полная строка с символами конца строки не придет, вы не получете ничего. Вы, как раз, установили этот режим. Что посылает устройство? |
Автор: Tiffany 22.5.2008, 15:00 |
Ken, та работает уже все. Написано же - вопрос решенный. |
Автор: Oligarch 11.4.2009, 09:30 | ||
Помогите пожалуста. Почему то при чтении из порта при помощи команды read(), читается не больше 14 символов, сколько бы я не указывал читать в последнем параметре read(). Вот код конфигурации порта и чтения из него:
|