URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7237
[ Назад ]

Исходное сообщение
"Проблема при обращении к com-порту /dev/ttyS0"

Отправлено hellbat , 06-Мрт-08 11:32 
Программирую com-порт, для отладки пытаюсь писать туда одним процессом,
а считывать другим. Открываю с помощью
open( "/dev/ttyS0", O_RDWR, O_NDELAY, O_NOCTTY );
затем fcntl( fd, F_SETFL, FNDELAY );
Пишется туда без проблем, а вот при чтении read() возращает -1.
Есть соображения, что устройство блокируется одним процессом и думаю, что
надо копать в сторону ioctl, но чтото в манах ничего не нашёл.

Содержание

Сообщения в этом обсуждении
"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено hellbat , 06-Мрт-08 11:54 
А, чуть не забыл! perror() возвращает Resourse temporarily unavailable

"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено eee , 06-Мрт-08 12:50 
>Программирую com-порт, для отладки пытаюсь писать туда одним процессом,
>а считывать другим. Открываю с помощью
>open( "/dev/ttyS0", O_RDWR, O_NDELAY, O_NOCTTY );
>затем fcntl( fd, F_SETFL, FNDELAY );
>Пишется туда без проблем, а вот при чтении read() возращает -1.
>Есть соображения, что устройство блокируется одним процессом и думаю, что
>надо копать в сторону ioctl, но чтото в манах ничего не нашёл.
>

Для loopbabk, порт должен быть настроен. Надо проверить работает ли прерывание setserial /dev/ttyS0.
У меня другая проблема, как определить конец передачи по ассинхронному порту rs-422. Не все контакты задествованы.
Документация есть http://tldp.org/HOWTO/Serial-Programming-HOWTO/


"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено Fisher , 06-Мрт-08 13:38 
>Программирую com-порт, для отладки пытаюсь писать туда одним процессом,
>а считывать другим. Открываю с помощью
>open( "/dev/ttyS0", O_RDWR, O_NDELAY, O_NOCTTY );
>затем fcntl( fd, F_SETFL, FNDELAY );
>Пишется туда без проблем, а вот при чтении read() возращает -1.
>Есть соображения, что устройство блокируется одним процессом и думаю, что
>надо копать в сторону ioctl, но чтото в манах ничего не нашёл.
>

http://www.opennet.me/docs/RUS/serial_guide/


"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено hellbat , 07-Мрт-08 12:42 
>http://www.opennet.me/docs/RUS/serial_guide/

Читал аж на 2 языках, не помогло)
Как настроить порт для loopback?



"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено Fisher , 07-Мрт-08 13:36 
>>http://www.opennet.me/docs/RUS/serial_guide/
>
>Читал аж на 2 языках, не помогло)
>Как настроить порт для loopback?

Может так никто не делает, но когда я программировал com-порт, я просто физически соединил проиемник с передатчиком, а потом посылал и читал данные.


"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено hellbat , 08-Мрт-08 13:38 
>>>http://www.opennet.me/docs/RUS/serial_guide/
>>
>>Читал аж на 2 языках, не помогло)
>>Как настроить порт для loopback?
>
>Может так никто не делает, но когда я программировал com-порт, я просто
>физически соединил проиемник с передатчиком, а потом посылал и читал данные.
>

Мне нравится эта крутая технология программирования, но ,к сожалению, я не могу приносить всякие провода на работу :)


"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено alex , 16-Июл-09 17:39 
>[оверквотинг удален]
>>>
>>>Читал аж на 2 языках, не помогло)
>>>Как настроить порт для loopback?
>>
>>Может так никто не делает, но когда я программировал com-порт, я просто
>>физически соединил проиемник с передатчиком, а потом посылал и читал данные.
>>
>
>Мне нравится эта крутая технология программирования, но ,к сожалению, я не могу
>приносить всякие провода на работу :)

Правильная технология, я соединяю только два контакта(rxd, txd) на одном порту и пытаюсь работать из одной проги. Иначе инфа просто не дойдёт.

У меня другая ошибка: при исполнении строки кода "tcgetattr(fd, def);" в консоли выдаётся "segmentation fault" и программа вылетает.



"Проблема при обращении к com-порту /dev/ttyS0"
Отправлено Mike , 07-Окт-11 10:08 
>open( "/dev/ttyS0", O_RDWR, O_NDELAY, O_NOCTTY );

Думаю, флажки необходимо объединить по "ИЛИ" для получения двоичной маски, а не перечислять через запятую:
open( "/dev/ttyS0", O_RDWR | O_NDELAY | O_NOCTTY );