3 / 3 / 0
Регистрация: 18.06.2009
Сообщений: 37
1

Чтение из COM порта, При чтении из порта зависает read()

11.02.2013, 19:36. Показов 6767. Ответов 2
Метки нет (Все метки)

Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не получается. програма зависает при read(). Я читал з /dev/tteS0 и /dev/tteS1. я ожидал что read() вернет 0 или чтото в етом роде но не зависнет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2013, 19:36
Ответы с готовыми решениями:

Зависает при чтении com порта
Привет всем, подскажите, пожалуйста, у меня есть прибор, с которого я считываю данные каждую...

«Зависает» при чтении com порта
Здравствуйте! Алгоритм программы следующий: «Читать до конца файла» 1.1 Программный reset...

При чтении com порта зависает приложение
Вот эта строка кода вешает всё приложение: textBox1->Text = serialPort1->ReadLine(); Если её...

Зависает форма при чтении из порта
Пишу программку, которая читает данные из серийного порта. Но форма повисает, пока чтение не...

2
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
12.02.2013, 11:44 2
Думаю, дело обстоит так как и сокетами. По умолчанию - они блокирующие, и при если присосаться к ним, то будете ждать, пока не получите данные. Чтобы получить 0 при чтении, если данные не пришли, нужно сделать дескрпитор неблокирующим с помощью функции fcntl:
PHP
1
fcntl(sockfd, F_SETFL, O_NONBLOCK);
0
3 / 3 / 0
Регистрация: 18.06.2009
Сообщений: 37
12.02.2013, 16:17  [ТС] 3
У меня стоит етот флаг. я подозреваю что не к тому порту стучал, но всеравно он не должен же зависнуть
C++ (Qt)
1
2
3
4
5
6
/ Настраиваем порт на асинхронную передачу 
// allow the process to receive SIGIO
 fcntl(p_Port, F_SETOWN, getpid()); 
// Make the file descriptor asynchronous (the manual page says only 
// O_APPEND and O_NONBLOCK, will work with F_SETFL...) 
fcntl(p_Port, F_SETFL, FASYNC);
O_NONBLOCK - у меня стоит при откритии порта щас и сюда поставлю

Добавлено через 2 минуты
Цитата Сообщение от NOCaut Посмотреть сообщение
У меня стоит етот флаг. я подозреваю что не к тому порту стучал, но всеравно он не должен же зависнуть
C++ (Qt)
1
2
3
4
5
6
/ Настраиваем порт на асинхронную передачу 
// allow the process to receive SIGIO
 fcntl(p_Port, F_SETOWN, getpid()); 
// Make the file descriptor asynchronous (the manual page says only 
// O_APPEND and O_NONBLOCK, will work with F_SETFL...) 
fcntl(p_Port, F_SETFL, FASYNC);
O_NONBLOCK - у меня стоит при откритии порта щас и сюда поставлю
да все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2013, 16:17
Помогаю со студенческими работами здесь

Чтение и проверка троек байт с последовательного порта, serialPort.Read()
Доброго времени суток! Буду рад Вашему совету о дальнейшем направлении разработки. Читаю...

Подвисает при чтении COM порта
Доброго времени суток, сделал программу, которая читает данные из COM порта, строка кода которая...

Зацикливание при чтении COM-порта в функции ReadFile()
Создал класс Transmit для работы с виртуальным COM-портом ПК. Transmit.h #include...

Откуда при чтении из COM-порта берутся 99 байт?
Здравствуйте! Этот отрывок кода взят из рабоче программы, которая работает около 2-х лет и судя по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru