metaclass: (Default)
[personal profile] metaclass
Есть несколько прог, работающих с ком-портом:
minicom - полноценный терминал, понимает модемы, куча настроек и прочая.
microcom - тупой минимизированный терминал.
stty - родная прога для управления параметрами терминала
cat /dev/ttyS0 и echo -e "CHERVIE\r" >/dev/ttyS0
и моя софтина для управления железом.

И имеется такой симптом: иногда после запуска minicom порт превращается в такую тыкву, что open("/dev/ttyS0", O_RDWR) виснет. Соответственно, microcom, cat и моя прога виснут. minicom и stty - нет.
Если поменять настройки порта с помощью stty - начинают работать опять:
stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 -echo -parenb cs8 -crtscts -ixon -ixoff clocal cread icanon icrnl ignpar
Похоже, что основная проблема в настройке clocal - если этот флаг установлен, все работает, иначе открытие виснет.
Заглянул в исходники minicom - делают чертовейшее вуду. Открывают порт с O_NDELAY, затем сбрасывают этот флаг. И далее, получив рабочий дескриптор файла - меняют его настройки.

PS: И вот как бы это следующее найти в мане, а не в гугле:
The O_NDELAY flag tells UNIX that this program doesn't care what state the DCD signal line is in - whether the other end of the port is up and running. If you do not specify this flag, your process will be put to sleep until the DCD signal line is the space voltage.

Date: 2012-04-23 08:20 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
а где вуду?

Date: 2012-04-23 08:25 am (UTC)
From: [identity profile] metaclass.livejournal.com
Невозможность открыть порт без извращений с O_NDELAY
Т.е., я же еще с портом ничего не делаю, я только хочу его открыть и далее уже менять настройки через tcsetattr
Но при этом настройки влияют на возможность открыть порт вообще.

Date: 2012-04-23 08:29 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
это, разумеется, правильное поведение.

Date: 2012-04-23 08:34 am (UTC)
From: [identity profile] metaclass.livejournal.com
Если у этого нет внятного объяснения - это безумие. "Пилить сук на котором сидим".

Date: 2012-04-23 08:35 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
clocal описание не читал ты, чую я!

Date: 2012-04-23 08:43 am (UTC)
From: [identity profile] metaclass.livejournal.com
man termios
CLOCAL Ignore modem control lines.

man stty
[-]clocal
disable modem control signals

все :)

Edited Date: 2012-04-23 08:43 am (UTC)

Date: 2012-04-23 08:46 am (UTC)
From: [identity profile] metaclass.livejournal.com
The O_NDELAY flag tells UNIX that this program doesn't care what state the DCD signal line is in - whether the other end of the port is up and running. If you do not specify this flag, your process will be put to sleep until the DCD signal line is the space voltage.

Ясно, объяснение все таки есть.

Date: 2012-04-23 09:11 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
чтени пары толстых книжек все же необходимо.
возможно, что два раза по паре -- две по юниксу и две по RT-11/VMS.

очень многое терминальное пошло из RT-11 (и в тамошних юзер-гайдах хорошо документированно), но вот где оно документированно в современной документации -- я даже не представляю. например, Control-O.
у меня-то пальцы и спинной мозг помнит, а остальным как?

Date: 2012-04-23 08:54 am (UTC)
From: [identity profile] nealar.livejournal.com
У меня встречный вопрос: на чём нопейсать наколенную поделку на 10 строк, шоб работать с компортом, дёргать ножки RTS/CTS, выдерживать более-менее чотко задержки 100 ms и кроссплатформенно, либо хотя бы падвендово.
У System.Hardware.Serialport унутре колхоз "10 лет без урожая", а какие ещё языки подходят для быстрого прототипирования, я нифкурси.

Date: 2012-04-23 09:04 am (UTC)
From: [identity profile] metaclass.livejournal.com
python и pyserial

но: никаких выдерживаний задержек и нестандартных дерганий линиями - это настолько погибельное решение, что лучше даже не связываться. Надо стараться жыдь в идеологии обычного терминала.

Date: 2012-04-23 09:13 am (UTC)
From: [identity profile] nealar.livejournal.com
В идеологии обычного терминала мне хватит стандартных утилиток и того же Serialport. Хочется именно синхронный протокол и прям на коленке. Поскольку параллельного порта больше нет, то сделать его можно только на ножках последовательного. Отсюда RTS/CTS/задержки и конец кроссплатформенности, например.
Настоящие джедаи взяли бы микроконтроллер и сваяли на нём переходник "обычный компортовый терминал <-> синхронный протокол", но для моей недозадачки это будет оверкилл.

Date: 2012-04-23 09:37 am (UTC)
From: [identity profile] metaclass.livejournal.com
А почему именно синхронный?

Date: 2012-04-23 12:17 pm (UTC)
From: [identity profile] nealar.livejournal.com
Потому что это в условиях задачи. :( Есть техника, выдающая инфу по доисторическому медленному синхронному протоколу с уровнями RS232. Надо этот поток просунуть через связное оборудование. Чтоб понять, как, надо склепать стенд - с наскока не получилось.
Либо административно утрясти перенастройку на что-то более современное на обоих концах канала. Этот вариант решения не проходит, потому что слишком медленно. Масква, блин.

Date: 2012-04-23 12:23 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, я бы смотрел в сторону FTDI или микроконтроллера, да.

Date: 2012-04-23 10:23 am (UTC)
From: [identity profile] nicka-startcev.livejournal.com
Синхронный нафиг. Для синхронного берите или SPI или вариации на тему JTAG. а вообще, на персоналке с подземными стуками и многозадачностью синхронности и реалтаймовости не место. Например, все перверсии с дерганием битиком в компорту при использовании упш2ком переходника начинают работать на скорости "1 бит на 8 больших кадров" и жалкая атмега8 шьется около 4 часов.

Date: 2012-04-23 12:10 pm (UTC)
From: [identity profile] nealar.livejournal.com
Это где ж я в компе возьму SPI или JTAG?
Подземные стуки не настолько сильны, чтоб 100 мс такт поломать, ящетаю.

Date: 2012-04-23 12:11 pm (UTC)
From: [identity profile] metaclass.livejournal.com
100 - запросто поломается.

Date: 2012-04-23 12:12 pm (UTC)
From: [identity profile] metaclass.livejournal.com
И опиши вообще задачу, может там синхронность и не нужна совсем.

Date: 2012-04-23 12:52 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
(вкрадчиво) Буферизацию компорта отключать будете?

А с NMI,ACPI и аппаратной виртуализацией что делать будете? Вот померещится вашему биосу перегрев, всё заморозится на пару секунд.

ненене. Весь реалтайм - в отдельной железке, без винды и (анти)вирусов. И желательно без прочих прелестей современной х86 инфраструктуры.

Date: 2012-04-23 02:29 pm (UTC)
From: [identity profile] nealar.livejournal.com
У ножек RTS/CTS/etc есть буферизация? Вот новость!
померещится вашему биосу перегрев
А ещё метеорит упадёт, ага. Положу в холодильник на полчаса. Задача-то одноразовая.

Date: 2012-04-23 04:47 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
>У ножек RTS/CTS/etc есть буферизация?

Вы про честный 8250/16550, или как там его?
Или про любую хрень, которая видится компортом, включая pl2303?

Вам надо быстрый (быстрее килогерца) битбанг, или вы хотите этот rts/cts дергать синхронно с потоком байтов?

если одноразовая - то можно. Но у меня пролетающая помеха помешала перешить, пришлось еще два раза по нескольку часов ждать. Хотя, если уар не через УПШ, то для одноразовой работы нормально. Но я бы тогда вообще на ЛПТ завязался.

Date: 2012-04-24 03:21 pm (UTC)
From: [identity profile] nealar.livejournal.com
быстрее килогерца
100 мс - это быстрее килогерца?
Но я бы тогда вообще на ЛПТ завязался.
Я бы завязался на LPT с самого начала, и сейчас всё бы уже работало готовое, если бы этот LPT был.

Date: 2012-04-23 02:30 pm (UTC)
From: [identity profile] nealar.livejournal.com
желательно без прочих прелестей современной х86 инфраструктуры
Я знаю устройство 586+ инфраструктуры, и потому не боюсь её.

Date: 2012-04-23 04:48 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
а я знаю альтернативы и по возможности пользую их.
у х86 практически только один плюс - порог вхождения.

Date: 2012-04-24 03:23 pm (UTC)
From: [identity profile] nealar.livejournal.com
Именно он, порог вхождения. Альтернативы надо во-первых купить. И на следующую задачу их придётся опять по-первых купить. А 686 или изредка arm9 - вон он, на полке стоит.

Date: 2012-04-24 03:58 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
ну, плюс, посмотрите, например, ардуино нано. оно с усб2уарт и небольшим набором ног.
можно всякие затейливые битбанги делать.

и стоит рупь пучок.

Date: 2012-04-23 10:32 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
синхронный. ты уверен, что правильно понимаешь этот термин?
стандартный RS232 на персоналке не умеет быть синхронным.
там, вообще-то, пропадают старт-стоп биты и появляются клоки на rx и tx.

кстати, парелельный порт найти проще, чем последовательный, если хоть что-то есть.
и джедаи ваяли бы не компорт-синхронный, а usb-синхронный, поскольку rs232 практически извели.

Date: 2012-04-23 09:34 am (UTC)
From: [identity profile] skif-by.livejournal.com
Кроссплатформенно весьма условно - под linux & windows разные модули, причём под win его без бубна и пол-литры собрать сложно. Я лично использую python + pyserial, полёт нормальный.

Date: 2012-04-23 09:36 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
зачем собирать, если есть активперл?
что там разного? posix? select?

Date: 2012-04-23 09:43 am (UTC)
From: [identity profile] skif-by.livejournal.com
Хм. А вот сейчас поставил - завелось. Пару-тройку лет назад оно упорно не взлетало именно на этапе установки модуля. Хотя м.б. ручки кривые.

Date: 2012-04-23 10:39 am (UTC)
From: [identity profile] black-angel-by.livejournal.com
Скачал активперл и нарушил закон, ограничивающий экспорт активперла и активпитона в нашу стану ?

Date: 2012-04-23 10:42 am (UTC)
From: [identity profile] skif-by.livejournal.com
Не, активперл я скачал ещё раньше, сегодня только модуль поставил :) Кстати, запрет по IP у них забавный - помнится, пол-года назад bas-net рубило, а byfly пропускало.

Date: 2012-04-23 11:06 am (UTC)
From: [identity profile] eternal-leave.livejournal.com
Это активстейт нарушил, а не ты.

Date: 2012-04-23 12:12 pm (UTC)
From: [identity profile] nealar.livejournal.com
закон, ограничивающий экспорт активперла и активпитона
SRSLY?? Что курили авторы?

Date: 2012-04-23 12:21 pm (UTC)
From: [identity profile] metaclass.livejournal.com
РБ забанена по IP у них, серьезно :)

Date: 2012-04-23 12:33 pm (UTC)
From: [identity profile] nealar.livejournal.com
забанена по IP
Мне кажется, это даже от школьников не защитит. Вероятно, начальнег ActiveState очень хотел высказаться на политическую тему, и вот, демонстрация.

Date: 2012-04-23 12:44 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Так главное продемонстрировать, а обход перекладывает ответственность на обходящих.

Date: 2012-04-23 10:42 am (UTC)
From: [identity profile] arush-damage.livejournal.com
The O_NDELAY flag tells UNIX that this program doesn't care what state the DCD signal line is in - whether the other end of the port is up and running. If you do not specify this flag, your process will be put to sleep until the DCD signal line is the space voltage.
Такие вещи надо не в man искать а в info.

Date: 2012-04-24 08:41 am (UTC)
From: [identity profile] jek-hor.livejournal.com
Вообще, tty-подсистема в Linux --- сплошное чёртово вуду, тянущееся с доисторических времён. Я на уровне ядра с этим работал --- ад и израиль.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 12th, 2025 08:49 am
Powered by Dreamwidth Studios