Работа с СОМ-портом на Си в linux
Oct. 23rd, 2020 05:59 pmСегодня Великий День, я впервые написал статью моему хорошему другу
di_halt на сайт http://easyelectronics.ru/

Вы можете прочитать её по следующей ссылке. Выражаю благодарность
xlat за разрешение использовать её фотографию в данной статье. Это Teletype Model 33 ASR. Данное устройство, как нельзя лучше иллюстрирует все проблемы работы с СОМ-портом.
В целом, практически обо всём я так или иначе рассказывал на своих вебинарах, но порой лучше прочитать, чем просмотреть.

Вы можете прочитать её по следующей ссылке. Выражаю благодарность
В целом, практически обо всём я так или иначе рассказывал на своих вебинарах, но порой лучше прочитать, чем просмотреть.
no subject
Date: 2020-10-23 05:00 pm (UTC)А вот мелкие детали... Вплоть до ioctl все было нормально. Везде были уточнения, но... Все они были явно лишними в рамках рассматриваемой темы и уводили в те дебри, куда не всякому лезть надо. А вот пассаж "Системный вызов ioctl не стандартизован и очень опасен" заставил аж передернуться. Нет же. Нет никакой опасности в вызове IOCTL. Более того - это исторически первый (и долгое время единственный) способ конфигурирования порта. Он же самый универсальный. Увы, termios не во всех UNIX одинакова. Другое дело, что реализация IOCTL (как, впрочем, и POOL для не блокирующего чтения) остается на совести авторов драйвера конкретного порта. Далеко не все допустимые параметры реализованы в том же ttyACM. Часть в принципе невозможно реализовать. Спецификация интерфейса их не предусматривает. Часть просто не реализована.
Про 485ый справедливо. Не смотря на наличие специального режима в ядре, в реальной жизни оно мало кем используется. А уж для USB-конвертеров и подавно. Подавляющее большинство таких изделий не требуют каких-либо усилий и используют аппаратный сигнал переключения чтения/записи. Но большинство - не значит все. Часть использует RTS. А некоторые еще какую-то экзотику. Потому с общим выводом согласен, но мне кажется что краски уж больно густыми вышли.
И еще. Serial Programming HOWTO (лучше в оригинале, но... http://linux.yaroslavl.ru/docs/howto/Serial-Programming/Serial-Programming-HOWTO_ru.html - раз уж статья на русском) в сносках крайне желательно.
no subject
Date: 2020-10-23 07:30 pm (UTC)ioctl не регламентирует размер третьей переменной, и этот вызов может делать переполнение. Самый коварный вызов. В рамках порта да, но при работе в целом он плох.
Serial Programming HOWTO для меня был бесполезен чуть более чем полностью.
no subject
Date: 2020-10-24 05:59 am (UTC)Нет, блин. Это реально страшно. Любое упоминание (void *) вводит современных программистов в ступор. Потому простой и понятный ioctl обзавелся сокетной альтернативой типа netlink. Куда более тяжелой и неудобной, за то понятной современным программистам. Та же ерунда с системой инициализации. Шутитли в свое время про Nero, которое должно своей осью обрасти. Дошутились. Здравствуй systemd. SysV, при всех его недостатках, был понятным. И надежность системы зависела от качества кода в ней, а не от возможности поднять не вовремя упавшее. А потом удивляемся - и почему код стал таким большим, неповоротливым и ненадежным.
Из "старья" мне не жалко разве что XFree86. Вот она получилась реально замороченной. И для своего времени, и тем более сейчас. Когда она обросла слоями совместимости. Мне нравится как себя ведет Weston в Embedded. Надеюсь в скором времени и прикладники научатся с ним нормально работать.
Но, продолжая с ностальгией, могу сказать еще вот что. В далеком 1998 году, когда на моем HP Vectra 486DX2-66 с аж 16Мб RAM и 540Mб жестким диском, меня, практически выпускника колледжа радиоэлектронники, очень порадовала Coffee Making HOWTO. Теперь ее и найти-то не просто. Оригинал на https://tldp.org/HOWTO/Coffee.html датирован 2004 годом, русский перевод более ранний https://www.opennet.ru/docs/HOWTO-RU/Coffee.koi8-r.html - 1998 год. Мы же помним золотое правило - документация либо русская, либо правильная. До сих пор актуально. Но суть не в этом. Суть в том, что в далеком 1998 году FIdo'шники обсуждали возможность перезапуска станции путем выноса кнопки Reset компьютера в сторону лотка CDROM'а. Типа программно открываем CDROM и лотком нажимаем на сброс а тут такое богатство. Так что могу сказать четко, и Serial Programming и Coffee Making HOWTO очень серьезно помогли мне в части выбора жизненного пути. Вплоть до изучения английского (ибо русского перевода тогда еще не было от слова совсем).
Теперешней молодежи вроде и легче (компьютеры доступнее) и тяжелее. Принтерный порт умер, последовательный планомерно изживается из ПК и остается только у embedder'щиков. Правда сегодня есть замечательные gpio-led(s) и gpio-key(s). Но завести их сильно сложнее.
no subject
Date: 2020-10-26 02:53 pm (UTC)Самое смешное, что поднять не вовремя упавшее тоже не требует особой сложности. Что runit, что daemontools имеют копеечный размер и отлично работают. С зависимостями немного сложнее, но тоже можно.
no subject
Date: 2020-10-24 08:38 am (UTC)no subject
Date: 2020-10-25 12:34 pm (UTC)no subject
Date: 2020-10-25 03:25 pm (UTC)А не поделитесь кому и зачем такое понадобилось?
no subject
Date: 2020-10-25 04:43 pm (UTC)А мне надо пусть и медленно но множественный доступ. В теории.... не то что бы я уже прямо так хочу это все реализовывать. Тут может и двухпроводный пром эзернет (10 мБит) подвезут когда -нибудь как и анонсировали недавно... но там правда точек на одном проводе совсем не много, да и ценник поди ахунг в начале
no subject
Date: 2020-10-25 04:55 pm (UTC)no subject
Date: 2020-10-25 05:14 pm (UTC)да канал не надо утилизировать весь, скорости хватает
> Но в целом какая разница в какую бумажку заворачивать кадры. Хоть Ethernet, хоть IP, хоть IPX
Эзернет в чистом виде кажется не пройдёт по таймингам. Помню - кварцы перепаивали до 2-2.5mHz если не изменяет память. И кажется если ниже начинало ломаться.
Собств коммент был, что гугль мне ничего такого путного не сказал по этой теме, удивило. Может не так спрашивал?
no subject
Date: 2020-10-25 05:31 pm (UTC)Собственно, потому и интересуюсь кому и зачем надо. Есть же всякие ModBus'ы как раз для этих целей. С ними проще. ДА и если надо, есть железки которые RTU через Ethernet гоняют...
no subject
Date: 2020-10-25 07:40 pm (UTC)Речь конечно просто о tcp/ip по RS485, может даже и просто UDP для простоты.
с ходу вот предлагают, но не вникал пока: https://github.com/dukelec/cdbus_doc
no subject
Date: 2020-10-25 08:05 pm (UTC)У него же как я понял - фатальный недостаток - один мастер(опросник), а надо каждый с каждым, отсюда и аналогия с эзернетом
no subject
Date: 2020-10-26 04:02 am (UTC)no subject
Date: 2020-10-26 04:24 am (UTC)no subject
Date: 2020-10-26 04:33 am (UTC)