реклама на сайте
подробности

 
 
> Бинарный обмен через ttySX в линухе
3.14
сообщение Jan 9 2006, 20:16
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



К платке с uClinux-ом через его серийный порт №2 (ttyS1) подключен контроллер, который периодически вываливает пакетик данных. А как нужно в линухе такой пакет "правильно" ловить, ничего страшного не будет если я случайно его пропущу. В любой "обычной" встраиваемой системе я бы просто опрашивал либо флаг прерывания либо сигнал пустоты приемного ФИФО, ну а тут ведь я должен обращатся к нему как к файлу cranky.gif
В качестве теста вместо контроллера я подключил виндовую терминалку, странности:
1) после того как мое приложение откроет серийнй порт (через open или fopen) в терминалку посылается эхо нажатой клавишы (после закрытия порта эхо прекращается)?
2) чтение из порта стоит до тех пор пока не введеш "возврат коретки", я конечно понимаю что это связанно с форматированным вводом выводом, но как устранить это не знаю (при открытии c fopen с ключем 'rb' ничего не меняет).


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
makc
сообщение Jan 9 2006, 21:20
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Открывать нужно с помощью 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: Стоит, кстати, убедиться, что в терминалке точно не стоит режим эха.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 18:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016