metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-23 11:15 am

Свежее чертово вуду с /dev/ttyS*

Есть несколько прог, работающих с ком-портом:
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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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