засыпание до получения сигнала с COM-порта (проблема решена, спасибо тем, кто пытался помочь)

Модератор: Модераторы разделов

math
Сообщения: 300
Статус: Ъ участник
ОС: Artix (= Arch without systemd)

засыпание до получения сигнала с COM-порта

Сообщение math »

требуется написать код, останавливающий выполнение программы до изменения сигналов на линиях COM-порта
я пробовал опрашивать порт в цикле с помощью ioctl()
в принципе работает, но устройство, подключённое к порту, очень быстро меняет состояние на первоначальное и программа не успевает зафиксировать
предполагаю использовать IRQ, но не знаю как
может подскажите решение проблемы?
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: засыпание до получения сигнала с COM-порта

Сообщение Galaxy Master »

math писал(а):
01.03.2008 14:49
требуется написать код, останавливающий выполнение программы до изменения сигналов на линиях COM-порта
я пробовал опрашивать порт в цикле с помощью ioctl()
в принципе работает, но устройство, подключённое к порту, очень быстро меняет состояние на первоначальное и программа не успевает зафиксировать
предполагаю использовать IRQ, но не знаю как
может подскажите решение проблемы?


а что за сигналы?
и что значит "очень быстро" ? это растяжимое понятие...
так же не понятно что вы делаете, читаете/или еще что-то...

если хотите что-то прочесть из порта - посмотрите poll
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: засыпание до получения сигнала с COM-порта

Сообщение Denjs »

можно добиться установками таймаутов того, что программа останавливается на READ пока не получит нужное число байт данных или не наступит таймаут...
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
math
Сообщения: 300
Статус: Ъ участник
ОС: Artix (= Arch without systemd)

Re: засыпание до получения сигнала с COM-порта

Сообщение math »

Порывшись в исходниках ядра нашёл параметр TIOCMWAIT для ioctl. Так что в принципе проблема решена.
Дело в том, что я ничего из порта не читаю. Порт используется как физическое устройство, изменяющее напряжения на пинах и, соответственно, определяющее установленное извне напряжение.
Спасибо сказали: