The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Мусор в буфере com порта"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Мусор в буфере com порта"  +/
Сообщение от Aleksey1989 email(ok) on 23-Мрт-11, 18:37 
Здравствуйте всем!
Столкнулся я с такй проблемой, что в Linux Angstrom на devkit8000 после  вызова Read в буфере остаётся старая информация, при чем очень долого. Задача моя на данном устрйстве реализовать gateway по протоколу modbas(соединяю сеть ethernet c serial).

Момент времени #1:
Записал пакет
Читаю ответ
Нормально

Момент времени #2:
Записал пакет
Читаю ответ, а он от предыдущего. Хотя сработала ioctl(fd, FIONREAD, &byte);

Момент времени #3:
Записал пакет
Читаю ответ, а он от предыдущего. Хотя сработала ioctl(fd, FIONREAD, &byte);

Такую проблему решал с помощью usleep(100000) между Write и  Read, но потребовалась большая скорость передачи и я не знаю как мне убрать этот usleep. Так есть ли какая нибудь функция очитски буфера com порта ?

Так же иногда вернув правильное значение вызов ioctl(usleep(1) делаю после) при чтении оказываются одни нули или инфа приправленая мусором. Кто-нибудь встречался с таким ?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Мусор в буфере com порта"  +/
Сообщение от pavlinux (ok) on 24-Мрт-11, 23:59 
> Так есть ли какая нибудь функция очитски буфера com порта ?

tcflush(fd,TCIOFLUSH);


а может спасёт:

options.c_cflag &= ~NOFLSH;
tcsetattr(fd, TCSANOW, &options);
fcntl(fd, F_SETFL, FNDELAY);


код показывай!

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Мусор в буфере com порта"  +/
Сообщение от Alex_S (??) on 25-Мрт-11, 03:27 

во-первых - да, tcflush()
во-вторых - всегда выгребай из буфера все, что там есть. Если там что-то появляется до того, как отправил запрос - чини слэйв девайсы. Если там корректный кадр - значит где-то побилась синхронизация - в модбасе нет возможности узнать, на какой именно запрос пришел ответ .

еще порту полезно включить low latency

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Мусор в буфере com порта"  +/
Сообщение от Aleksey1989 email(ok) on 30-Мрт-11, 12:47 
делаю tcflush() и весь мусор уходит! Спасибо всем.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру