Re: проблема с COM портом
От: Leo Yuriev Россия https://github.com/erthink
Дата: 25.04.06 10:08
Оценка: 3 (1)
Здравствуйте, Targutay, Вы писали:

T>при работе с СОМ портом настраеваю

T>COMMTIMEOUTS t;
T>t.ReadIntervalTimeout=20;// msec для работы на 2400-19200
T>в случае если принимаю кол-во байт НЕ кратное 8 байтам
T>то хвост теряется
[...]
T>и как с этим бороться
T>если нет то в чем причина ? Помогите плз

Да, дело именно в этом.

В стандартном системном драйвере COM-портов (и его клонах aka hiserial.sys, _serial.sys и т.д.), в коде обработки таймаута по приёму, нет контроля на наличие "хвоста" в FIFO. Т.е. вычитка из FIFO происходит только при поступлении соответствующего прерывания. При включенном FIFO, если в FIFO еще есть место до TRIGGER-LEVEL, UART не выдаст прерывания пока с момента принятия последнего байта не выйдет пауза равная времени приёма двух символов.

Бороться можно тремя способами:
1) Отключить использование FIFO;
2) Установить ReadIntervalTimeout с учетом двух-символьной паузы;
3) Использовать альтернативный драйвер SerialXp;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.