![]() |
#1
|
|||
|
|||
![]()
Denis Sovkov написал(а) к All в Nov 23 22:08:04 по местному времени:
* Forwarded from ru.unix by Denis Sovkov (2:5020/570.77). * Originally by: Denis Sovkov (2:5020/570.77), 29 Nov 23 22:02. * Originally to: all. Нello everybody! Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0 с флагом ORDWR - можно как записывать, так и читать. В программе два параллельных потока - один раз в 3 секунды записывать текстовыю строку в открытый дескриптор, другой считывает оттуда присланную строку ПОБАЙТНО внешним устройством тогда, когда сможет и выводит на экран. Проблема в том, что во входные данные попадает часть того, что пишется в дескриптор, причем независимо от времени. Пробовал защищать дескриптор мютексом - не помогло, мусорные данные все равно попадают на вход (кстати, нужные данные при этом тоже считываются). Пробовал ставить флаг ODSYNC - тоже не помогло. Мозможно, нужно очищать буфер (какой и как?) сразу после отправки строки. В потоках буферы используются разные - для каждого потока свой. Имею ввиду очистку выходного буфера, который пишет write. ЧЯДНТ? Куда копать? Denis --- GoldED+/LNX 1.1.5-b20180707 |
#2
|
|||
|
|||
![]()
Nil A написал(а) к Denis Sovkov в Nov 23 22:23:44 по местному времени:
Нello, Denis! Wednesday November 29 2023 22:08, from Denis Sovkov -> All: DS> Ситауция следующая: имеем программу, программа открывает /dev/ttyUSB0 DS> с флагом O_RDWR - можно как записывать, так и читать. В программе два DS> параллельных потока - один раз в 3 секунды записывать текстовыю строку DS> в открытый дескриптор, другой считывает оттуда присланную строку DS> ПОБАЙТНО внешним устройством тогда, когда сможет и выводит на экран. DS> Проблема в том, что во входные данные попадает часть того, что пишется DS> в дескриптор, причем независимо от времени. Возможно, там где-то написано, что операции с сериальным /dev/ttyUSB не thread-safe. А что тебе мешает в потоке номер 1 просто сделать slect()/poll()/epoll() на выбор и пиши/читай, и делай после этого что тебе надо. Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#3
|
|||
|
|||
![]()
Denis Sovkov написал(а) к Nil A в Nov 23 22:44:14 по местному времени:
Нello Nil! 29 Nov 23 22:23, you wrote to me: DS>> входные данные попадает часть того, что пишется в дескриптор, DS>> причем независимо от времени. NA> Возможно, там где-то написано, что операции с сериальным /dev/ttyUSB NA> не thread-safe. А что тебе мешает в потоке номер 1 просто сделать NA> slect()/poll()/epoll() на выбор и пиши/читай, и делай после этого что NA> тебе надо. Мешает отсутствие должной полноты знаний по IO в *NIX. Посмотрел маны на указанные вызовы - любопытно, спасибо! Буду копать в эту сторону. Завтра я не на работе, так что проверить смогу только послезавтра наверное... Будет время по RTFMмить )) Denis --- GoldED+/LNX 1.1.5-b20180707 |
#4
|
|||
|
|||
![]()
Nil A написал(а) к Denis Sovkov в Nov 23 23:15:18 по местному времени:
Нello, Denis! Wednesday November 29 2023 22:44, from Denis Sovkov -> Nil A: NA>> Возможно, там где-то написано, что операции с сериальным NA>> /dev/ttyUSB не thread-safe. А что тебе мешает в потоке номер 1 NA>> просто сделать slect()/poll()/epoll() на выбор и пиши/читай, и NA>> делай после этого что тебе надо. DS> Мешает отсутствие должной полноты знаний по IO в *NIX. Посмотрел маны DS> на указанные вызовы - любопытно, спасибо! Буду копать в эту сторону. DS> Завтра я не на работе, так что проверить смогу только послезавтра DS> наверное... Будет время по RTFMмить )) Там где должно быть написано, скорее всего даже что не thread-safe а как-то, типа один только дескриптор на /dev/ttyUSB, а иначе UB. Дык, юниксы, они такие, там треды завезли только сильно после форков. А так весь IO обрабатывает я на select() (до 1024 дескрипторов, но и даже сегодня так уже писать не надо), либо современный epoll(). Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#5
|
|||
|
|||
![]()
Denis Sovkov написал(а) к Nil A в Nov 23 14:43:42 по местному времени:
Нello Nil! 29 Nov 23 23:15, you wrote to me: NA> Дык, юниксы, они такие, там треды завезли только сильно после форков. Ну вот и у меня как раз pthread's )) Denis --- GoldED+/LNX 1.1.5-b20180707 |