Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Бинарный обмен через ttySX в линухе
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
3.14
К платке с uClinux-ом через его серийный порт №2 (ttyS1) подключен контроллер, который периодически вываливает пакетик данных. А как нужно в линухе такой пакет "правильно" ловить, ничего страшного не будет если я случайно его пропущу. В любой "обычной" встраиваемой системе я бы просто опрашивал либо флаг прерывания либо сигнал пустоты приемного ФИФО, ну а тут ведь я должен обращатся к нему как к файлу cranky.gif
В качестве теста вместо контроллера я подключил виндовую терминалку, странности:
1) после того как мое приложение откроет серийнй порт (через open или fopen) в терминалку посылается эхо нажатой клавишы (после закрытия порта эхо прекращается)?
2) чтение из порта стоит до тех пор пока не введеш "возврат коретки", я конечно понимаю что это связанно с форматированным вводом выводом, но как устранить это не знаю (при открытии c fopen с ключем 'rb' ничего не меняет).
makc
Думаю, на многие вопросы может ответить http://www.easysw.com/~mike/serial/ - Serial Programming Guide for POSIX Operating Systems
3.14
Спасибо за ссылку, стало понятней.
Но все равно как ни крутил, буфер принятых данных становится доступным только после передачи 0x0A, интересно так в линухе должно быть или это специфика драйвера UARTlite для uClinux. Да и с эхом во время открытия порта то же не понятно.
makc
Открывать нужно с помощью open.
Цитата
The two most important POSIX functions are tcgetattr(3) and tcsetattr(3).


И это правда. Для того, чтобы избавиться от эха нужно получить текущие атрибуты терминальной линии с помощью tcgetattr, снять биты типа ECHO в поле c_lflag и обновить атрибуты с помощью tcsetattr:

Код
Choosing Raw Input

Raw input is unprocessed. Input characters are passed through exactly  as they are received, when they are received. Generally you'll deselect  the ICANON, ECHO, ECHOE, and ISIG options  when using raw input:

     options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

Choosing Raw Output

Raw output is selected by resetting the OPOST option in the  c_oflag member:

     options.c_oflag &= ~OPOST;  When the OPOST option is disabled, all other option bits in c_oflag are ignored.



PS: Стоит, кстати, убедиться, что в терминалке точно не стоит режим эха.
Evgeny_CD
Цитата(makc @ Jan 9 2006, 23:31) *
Думаю, на многие вопросы может ответить http://www.easysw.com/~mike/serial/ - Serial Programming Guide for POSIX Operating Systems
cheers.gif a14.gif Чудесная дока!
makc
Да, дока замечательная. Я по ней в свое время минут за 20 разобрался и написал кусочек своей кросплатформенной библиотечки (под линукс) для работы с COM-портом. Нужно залить ее на FTP. biggrin.gif
Harbour
Ни в коем случае не ставлю под сомнение качество индивидуальных реализаций, но все таки настоятельно рекомендую применять, если позволяют обстоятельства, прожженные и потрепанные тысячами юзверей гнутые варианты аля commoncpp.
makc
Цитата(Harbour @ Jan 11 2006, 00:00) *
Ни в коем случае не ставлю под сомнение качество индивидуальных реализаций, но все таки настоятельно рекомендую применять, если позволяют обстоятельства, прожженные и потрепанные тысячами юзверей гнутые варианты аля commoncpp.


У меня была задача, чтобы кроме всего прочего эта библиотека работала в ДОСе под DJGPP. На сколько я понял, commoncpp - это больше гнутая обертка вокруг POSIXовых функций. Т.е. нет этих функций - начинаются проблемы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.