Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
PolAR
Зарегистрирован: 01.11.2004 Сообщения: 133
|
Добавлено: Чт Авг 04 2005 07:55 Заголовок сообщения: вопрос по программированию СОМ-порта |
|
|
Небольшая проблемка:
пишу прогу, которая работает в Линуксе с СОМ-портом. скорость 4800
1. если открывать /dev/ttyS0 без флага O_NDELAY - все работает быстро, но если устройство отсутствует - прога виснет, поскольку процесс блокируется до момента поступления символа в канал.
2. если открывать с флагом O_NDELAY, то возникает следующая проблемма:
при записи символа устройство отвечает эхом.
в проге в линухе идет так:
Код: | write(fd,str,1);
read(fd,&ch,1);
|
(для проверки того что устройство подключено )
read не читает ничего.
Но если сделать так:
Код: | write(fd,str,1);
sleep(1);
read(fd,&ch,1);
|
все нормально работает, но задержка сильно заметна.
насколько я понимаю устройство не успевает ответить, поскольку
у него процессор медленнее.
можно ли как-нибудь обойтись без sleep, но открывать файл в неблокирующемся режиме! _________________ Come Together!! Right Now.... |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Чт Авг 04 2005 13:19 Заголовок сообщения: Re: вопрос по программированию СОМ-порта |
|
|
PolAR писал(а): | ...можно ли как-нибудь обойтись без sleep, но открывать файл в неблокирующемся режиме! |
(далее про COM порт вообще, а не чиссо под Unix)
обычно при работе с COM портом поступают следующим образом...
1) Постоянно ждут приёма.
2) Вводят обработку события приёма.
В Вашем случае, если ждать постоянно - это отдельный поток (процесс в стиле юникс). В фазе подьёма - тестить порт на наличие и извещать парента об успехе либо не успехе.
Если не хочеться поток - то как альтернатива, общаться с портом асинхронно. Послали бла-бла-бла, дошли до точки критичной к получению - ждёмс... Но тут есть нюанс... Если Вы хотите создать более "умную" логику, которая не впадёт в ступор - то придёться вводить временной фактор ожидания - а это пахнет опять отдельным потоком, либо событием на таймере.
Кстати говоря, если перефирия у Вас - МК, то как правило они имеют в своём наличии буфер обмена в 1 байт. Посему посылка пачкой - возможно не прокатит (сильно зависит от кода в МК). Если в добавок он общаеться с перефирией типа 1-Wire устройствами, то там ышо тяжелее случай.
удачи Вам.
(круглый) |
|
Вернуться к началу |
|
|
PolAR
Зарегистрирован: 01.11.2004 Сообщения: 133
|
Добавлено: Пт Авг 05 2005 07:50 Заголовок сообщения: |
|
|
Действительно!
про дочерний процесс, занимающийся только чтением - прикольная вещ!
спасибо! _________________ Come Together!! Right Now.... |
|
Вернуться к началу |
|
|
|