Работают ли опции последовательного порта VTIME и VMIN с select? - PullRequest
1 голос
/ 31 января 2012

У меня есть программа для Linux, которая читает последовательный порт, используя select() и read(). Работает нормально, но есть проблема с производительностью:

Программа получает данные только 1-4 байта за один read() вызов. И это вызывает ненужные накладные расходы.

Я установил VTIME на 20 (2 секунды) и VMIN на 9, чтобы избежать проблемы.

tcgetattr( fd, &termiosv );

termiosv.c_cc[VMIN]  = 9;
termiosv.c_cc[VTIME] = 20;

tcsetattr( fd, TCSANOW, &termiosv );

Но все равно select() возвращается немедленно, когда доступно только 1-4 байта. Трассировка из программы:

2012.03.31 14:31:34  Data from serial:
0000: 7E A0                           

2012.03.31 14:31:34  Data from serial:
0000: 07 21 03 71                     

2012.03.31 14:31:34  Data from serial:
0000: 13 63 7E  

Мои вопросы:

Работают ли опции последовательного порта VTIME и VMIN с select?

Если это должно сработать, почему select возвращается слишком рано?

Используется неканонический режим. Конфигурация последовательного порта:

~ # stty -F /dev/ttySC0 -a
speed 9600 baud; rows 24; columns 80;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 9; time = 20;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
~ #
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...