LINUX.ORG.RU

Таймаут при чтении из серийного порта


0

0

Всем привет. Помогите, пожалуйста, разобраться с таймаутами при работе с серийным портом (/dev/ttyS0). Устанавливаю я него примерно так:

struct termios tconf;
tcgetattr(fd, &tconf);
tconf.c_cc[VTIME] = timeout / 100;
tcsetattr(fd, TCSANOW, &tconf);
Если параметр timeout меньше 2500 мс, тогда тайумаут работает как надо. Если же это значение выставить выше 2500 мс, тогда он перестает нормально работать и, скажем, при значении в 10 сек, read() может ожидать данных с устройства и 30 и 40 сек, а только потом возвращает полученный байт. Причем байт доступен в устройстве практически моментально. Не знаю чего он там ещё ждёт. В чём может быть проблема? Мне нужны таймауты до 120 с. Сейчас вместо tcsetattr() использую select(), но это костыль.

может проблема в системе? какое ядро?
Посмотри у себя как используется TIME_CHAR(tty) в файле
/usr/src/linux/drivers/char/n_tty.c

Ещё тут глянь, тоже что-то про неправильный таймаут
http://lkml.indiana.edu/hypermail/linux/kernel/0509.1/0734.html

Да, если костыль работает не вижу причин не использовать его.

Dblmok
()
Ответ на: комментарий от Biga

Пардон за мой французский, серийный = serial = последовательный

xstream
() автор топика
Ответ на: комментарий от Dblmok

может проблема в системе? какое ядро?

может. ubuntu 8.10, linux 2.6.27-16-generic

Посмотри у себя как используется TIME_CHAR(tty) в файле

/usr/src/linux/drivers/char/n_tty.c

а что я там должен был увидеть? это нужно всё ядро изучать чтобы что-то понять...

xstream
() автор топика
struct termios tconf; 
tcgetattr(fd, &tconf);
tconf.c_cc[MIN] = 0; /* !!! */
tconf.c_cc[VTIME] = timeout / 100; 
tcsetattr(fd, TCSANOW, &tconf);
LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk
tconf.c_cc[MIN] = 0;

выставляется ещё до этого

xstream
() автор топика
Ответ на: комментарий от xstream

select - костыль?
тогда тебе пора нельзя использовать компьютер. там же полно софта на костылях!!)

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.