Инициализация com порта.
От: tcvirkun  
Дата: 12.12.13 21:14
Оценка:
Проблема в следующем:
есть компьютер на котором установлен Debian 6, для него пишется программа демон, которая общается с оборудованием по com портам.

Программы работает без сбоев все отлично, но если выдернуть шнур питания из компьютера и после запустить его, то программа не получает данные из com портов.
Начали разбираться и выяснили следующие закономерность:
если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.

Сравнивали состояния com портов до первого и после первого запуска (stty –a –F /dev/ttyS0) одинаковы, сравнивали структуры termios то же одинаковы.

Подскажите куда копать дальше?
Re: Инициализация com порта.
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.12.13 08:09
Оценка:
Здравствуйте, tcvirkun, Вы писали:

T> если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.


А если reboot, но без прохождения стоповых скриптов?

T>Сравнивали состояния com портов до первого и после первого запуска (stty –a –F /dev/ttyS0) одинаковы, сравнивали структуры termios то же одинаковы.

T>Подскажите куда копать дальше?

Сравнить dmesg, это навскидку.
Вообще же похоже на что-то в районе ACPI, но тут без бутылки не разобраться.
The God is real, unless declared integer.
Re: Инициализация com порта.
От: __UNIX_hokum  
Дата: 13.12.13 08:51
Оценка: +1
Здравствуйте, tcvirkun, Вы писали:

T> если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.


Есть подозрение, что где-то создаётся временный файл, индицирующий работу нормально инициализированного порта. А при жёсткой перезагрузке он не удаляется штатно. Соответственно, при последующем включении порт сразу "работает". Можно попробовать поискать, к каким файлам (особенно в каталогах временных файлов) идут обращения программы. Ну или же при запуске программы безусловно закрыть/открыть/инициализировать порт.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.