Здравствуйте, 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;