Название: Ошибка при работе с USB>serial Отправлено: joke от Октябрь 03, 2011, 08:27 Итак, дано:
- Система Ubuntu 10.10 - USB Device U-350 ST-Lab (подключено и распознается как /dev/ttyUSB0), - программа C++(Qt) с кодом, вида: ... qDebug() << __LINE__; /// (*) int m_fd = ::open("/dev/ttyUSB0", O_RDWR | O_NOCTTY ); qDebug() << __LINE__; /// (**) ... Так вот, точку (*) программа проходит, а точку (**) нет Т.е. на 'open' программа висит. НО! Запускаемая с LiveCD Ubuntu 10.04, программа успешно выполняется ( точки (*) и (**) ). Вопрос: куда копать? Параметры из /dev/serial полностью совпадают для двух систем. Машина одна. Использование иного USB>serial вместо и вместе с исходным результата не дало. Запуск под 'root' результата не дал. Название: Re: Ошибка при работе с USB>serial Отправлено: kuzulis от Октябрь 03, 2011, 09:06 Добавь O_NDELAY
Название: Re: Ошибка при работе с USB>serial Отправлено: joke от Октябрь 03, 2011, 09:24 Охохоюшки, грехи мои тяжкие...
From(http://www.tver.mesi.ru/e-lib/res/347/OPEN.htm): O_NDELAY Этот флаг может воздействовать на последующие операции чтения и записи [см. read(2) и write(2)]. При открытии именованного канала с установленными флагами O_RDONLY или O_WRONLY: 1. Если установлен флаг O_NDELAY, то вызов open только на чтение завершается без задержки, а вызов open только для записи отрабатывает с сообщением об ошибке, если в данный момент нет процесса, открывшего файл для чтения; 2. Если не установлен флаг O_NDELAY, то вызов open только на чтение блокируется, пока какой-либо процесс не откроет файл для записи, а вызов open только на запись блокируется, пока какой либо процесс не откроет файл на чтение. При открытии файла, ассоциированного с линией связи: 1. Если установлен флаг O_NDELAY, то вызов open завершается без ожидания несущей. 2. Если не установлен флаг O_NDELAY, то вызов open блокируется до появления несущей. >>> Т.е. у меня в в системе нет несущей на 'serial' ('ttyUSB0') >>> Из шапки видно, что это не аппаратная фича(баг), а программная. >>> С чем это может быть связано, как проверить, как исправить? Название: Re: Ошибка при работе с USB>serial Отправлено: joke от Октябрь 03, 2011, 09:34 (С):
O_NDELAY Этот флаг может воздействовать на последующие операции чтения и записи >>> Код работы с 'RS232' зарыт в Proxy классе в ОБЩЕЙ библиотеке, изменять логику работы нельзя. |