Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

вопрос по программированию СОМ-порта

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...