forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 29.11.2023, 23:11
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к All в Nov 23 22:02:08 по местному времени:


Нello everybody!


Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0 с флагом ORDWR - можно как записывать, так и читать. В программе два параллельных потока - один раз в 3 секунды записывать текстовыю строку в открытый дескриптор, другой считывает оттуда присланную строку ПОБАЙТНО внешним устройством тогда, когда сможет и выводит на экран. Проблема в том, что во входные данные попадает часть того, что пишется в дескриптор, причем независимо от времени. Пробовал защищать дескриптор мютексом - не помогло, мусорные данные все равно попадают на вход (кстати, нужные данные при этом тоже считываются). Пробовал ставить флаг ODSYNC - тоже не помогло. Мозможно, нужно очищать буфер (какой и как?) сразу после отправки строки. В потоках буферы используются разные - для каждого потока свой. Имею ввиду очистку выходного буфера, который пишет write. ЧЯДНТ? Куда копать?


Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #2  
Старый 30.11.2023, 08:51
Sergei Podstrigailo
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Sergei Podstrigailo написал(а) к Denis Sovkov в Nov 23 10:03:22 по местному времени:

Нello Denis!

29 Nov 23 22:02, Denis Sovkov wrote to All:

DS> Нello everybody!


DS> Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0
DS> с флагом O_RDWR - можно как записывать, так и читать. В программе два
DS> параллельных потока - один раз в 3 секунды записывать текстовыю строку
DS> в открытый дескриптор, другой считывает оттуда присланную строку
DS> ПОБАЙТО внешним устройством тогда, когда сможет и выводит на экран.
DS> Проблема в том, что во входные данные попадает часть того, что пишется
DS> в дескриптор, причем независимо от времени. Пробовал защищать
DS> дескриптор мютексом - не помогло, мусорные данные все равно попадают
DS> на вход (кстати, нужные данные при этом тоже считываются). Пробовал
DS> ставить флаг O_DSYNC - тоже не помогло. Мозможно, нужно очищать буфер
DS> (какой и как?) сразу после отправки строки. В потоках буферы
DS> используются разные - для каждого потока свой. Имею ввиду очистку
DS> выходного буфера, который пишет write. ЧЯДТ? Куда копать?


Лично я открываю так, и у меня всё работает как ожидается:

InputFd=open(SerDevice, ORDWR | O_NOCTTY | OSYNC );


Sergei

--- GoldED/W32 3.0.1
Ответить с цитированием
  #3  
Старый 30.11.2023, 12:11
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: Непонятки с read и write

Eugene Grosbein написал(а) к Denis Sovkov в Nov 23 12:10:31 по местному времени:

29 нояб. 2023, среда, в 22:02 NOVT, Denis Sovkov написал(а):

DS> Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0 с флагом
DS> O_RDWR - можно как записывать, так и читать. В программе два параллельных потока
DS> - один раз в 3 секунды записывать текстовыю строку в открытый дескриптор, другой
DS> считывает оттуда присланную строку ПОБАЙТНО внешним устройством тогда, когда
DS> сможет и выводит на экран. Проблема в том, что во входные данные попадает часть
DS> того, что пишется в дескриптор, причем независимо от времени. Пробовал защищать
DS> дескриптор мютексом - не помогло, мусорные данные все равно попадают на вход
DS> (кстати, нужные данные при этом тоже считываются). Пробовал ставить флаг O_DSYNC
DS> - тоже не помогло. Мозможно, нужно очищать буфер (какой и как?) сразу после
DS> отправки строки. В потоках буферы используются разные - для каждого потока свой.
DS> Имею ввиду очистку выходного буфера, который пишет write. ЧЯДНТ? Куда копать?

Похоже на то, что у устройства, подключенного через USB,
включено эхо ввода. И ему надо его выключить.

У старых аналоговых модемов такое было и у других устройств
с terminal line discipline тоже.

Что за устройство?

Eugene
--- slrn/1.0.3 (FreeBSD)
Ответить с цитированием
  #4  
Старый 30.11.2023, 15:50
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Sergei Podstrigailo в Nov 23 14:41:38 по местному времени:


Нello Sergei!

30 Nov 23 10:03, you wrote to me:

DS>> буферы используются разные - для каждого потока свой. Имею ввиду
DS>> очистку выходного буфера, который пишет write. ЧЯДТ? Куда копать?
SP> Лично я открываю так, и у меня всё работает как ожидается:
SP> InputFd=open(SerDevice, ORDWR | O_NOCTTY | OSYNC );

Спасибо! Про O_NOCTTY не дочитал видимо, попробую!

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #5  
Старый 30.11.2023, 15:50
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Eugene Grosbein в Nov 23 14:42:18 по местному времени:


Нello Eugene!

30 Nov 23 12:10, you wrote to me:

DS>> очистку выходного буфера, который пишет write. ЧЯДНТ? Куда
DS>> копать?
EG> Похоже на то, что у устройства, подключенного через USB,
EG> включено эхо ввода. И ему надо его выключить.
EG> У старых аналоговых модемов такое было и у других устройств
EG> с terminal line discipline тоже.

EG> Что за устройство?

Пролифик PL2303 (( других у нас на работе нет, увы. НО(!) пробовал с CP2102 и FT232R - тоже самое.

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #6  
Старый 30.11.2023, 16:10
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Sergei Podstrigailo в Nov 23 14:50:34 по местному времени:

* Replying to a msg in CARBONZ (My personal EchoMail)


Нello Sergei!

30 Nov 23 10:03, you wrote to me:

SP> * Origin: ua9ov[at]dxsoft.com http://www.dxsoft.com (2:5000/28)

О как! не сразу обнаружил! de R2AIV 73!

--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #7  
Старый 30.11.2023, 19:02
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Denis Sovkov в Nov 23 17:37:20 по местному времени:


Нello Denis!

30 Nov 23 14:41, I wrote to Sergei Podstrigailo:


DS>>> буферы используются разные - для каждого потока свой. Имею ввиду
DS>>> очистку выходного буфера, который пишет write. ЧЯДТ? Куда
DS>>> копать?
SP>> Лично я открываю так, и у меня всё работает как ожидается:
SP>> InputFd=open(SerDevice, ORDWR | O_NOCTTY | OSYNC );
DS> Спасибо! Про O_NOCTTY не дочитал видимо, попробую!

Вобщем, добавил в open O_NOCTTY и в stty добавить -echo при настройке порта и все поехало! Спасибо! Буду дальше ковыряться...

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
  #8  
Старый 02.12.2023, 16:41
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: Непонятки с read и write

Eugene Grosbein написал(а) к Denis Sovkov в Dec 23 13:51:01 по местному времени:

30 нояб. 2023, четверг, в 14:42 NOVT, Denis Sovkov написал(а):

DS>>> очистку выходного буфера, который пишет write. ЧЯДНТ? Куда
DS>>> копать?
EG>> Похоже на то, что у устройства, подключенного через USB,
EG>> включено эхо ввода. И ему надо его выключить.
EG>> У старых аналоговых модемов такое было и у других устройств
EG>> с terminal line discipline тоже.
EG>> Что за устройство?
DS> Пролифик PL2303 (( других у нас на работе нет, увы. НО(!) пробовал с CP2102 и
DS> FT232R - тоже самое.

Так это всё переходники для USB/COM, с этого надо было начинать.
Для COM-портов существует куча настроен драйвер терминала
с вышеупомянутой serial line discipline и первым делом
надо читать man stty и выставлять драйверу верные настройки линии
через stty. Вторым делом смотреть устройство, подключенное на этой
линии, оно тоже может дублировать вывод, как это делали модемы,
если им не запретить.

Eugene
--- slrn/1.0.3 (FreeBSD)
Ответить с цитированием
  #9  
Старый 02.12.2023, 16:41
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: Непонятки с read и write

Eugene Grosbein написал(а) к All в Dec 23 13:51:50 по местному времени:

02 дек. 2023, суббота, в 13:51 NOVT, Eugene Grosbein написал(а):

DS>>>> очистку выходного буфера, который пишет write. ЧЯДНТ? Куда
DS>>>> копать?
EG>>> Похоже на то, что у устройства, подключенного через USB,
EG>>> включено эхо ввода. И ему надо его выключить.
EG>>> У старых аналоговых модемов такое было и у других устройств
EG>>> с terminal line discipline тоже.
EG>>> Что за устройство?
DS>> Пролифик PL2303 (( других у нас на работе нет, увы. НО(!) пробовал с CP2102 и
DS>> FT232R - тоже самое.

EG> Так это всё переходники для USB/COM, с этого надо было начинать.
EG> Для COM-портов существует куча настроен драйвер терминала

*куча настроке драйвера терминала

EG> с вышеупомянутой serial line discipline и первым делом
EG> надо читать man stty и выставлять драйверу верные настройки линии
EG> через stty. Вторым делом смотреть устройство, подключенное на этой
EG> линии, оно тоже может дублировать вывод, как это делали модемы,
EG> если им не запретить.

Eugene
--
Поэты - страшные люди. У них все святое.
--- slrn/1.0.3 (FreeBSD)
Ответить с цитированием
  #10  
Старый 02.12.2023, 17:21
Denis Sovkov
Guest
 
Сообщений: n/a
По умолчанию Непонятки с read и write

Denis Sovkov написал(а) к Eugene Grosbein в Dec 23 16:09:52 по местному времени:

* Replying to a msg in CARBONZ (My personal EchoMail)


Нello Eugene!

02 Dec 23 13:51, you wrote to me:

EG>>> У старых аналоговых модемов такое было и у других устройств
EG>>> с terminal line discipline тоже.
EG>>> Что за устройство?
DS>> Пролифик PL2303 (( других у нас на работе нет, увы. НО(!)
DS>> пробовал с CP2102 и FT232R - тоже самое.
EG> Так это всё переходники для USB/COM, с этого надо было начинать.
EG> Для COM-портов существует куча настроен драйвер терминала
EG> с вышеупомянутой serial line discipline и первым делом
EG> надо читать man stty и выставлять драйверу верные настройки линии
EG> через stty. Вторым делом смотреть устройство, подключенное на этой
EG> линии, оно тоже может дублировать вывод, как это делали модемы,
EG> если им не запретить.

Вот все как раз именно так ) Сначала скрипт запускает stty с настройками, затем уже запускается само приложение. Запрет эхо, конечно, присутствует )) Теперь с другой проблемой воюю - ncurses с многопоточкой не особо дружит, ну и ладно.

Denis


--- GoldED+/LNX 1.1.5-b20180707
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:20. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot