при работе с СОМ портом настраеваю
COMMTIMEOUTS t;
t.ReadIntervalTimeout=20;// msec для работы на 2400-19200
под win 98, 2000 , све норм
а вот ХР проблемы
в случае если принимаю кол-во байт НЕ кратное 8 байтам
то хвост теряется
есть подозрение что в ХР регистр FIFO Control Register FCR
в старшие два бита (trig1 trig0 они отвечают за работу прерываний)
trig1, trig0, 0, 0, dma, rtf, rrf, fe — биты регистра FCR
trig1 trig0 16550
0 0 1 — прерывание срабатывает после приемя каждого байта
0 1 4 — 4 байта
1 0 8 — 8 байт
1 1 14 — 14 байт
установленны биты 1 0 т.е по 8 байт
так ли это ????
и как с этим бороться
если нет то в чем причина ?

Помогите плз
Здравствуйте, 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;
убедительная просьба следить за объемом цитирования — модератор
помогите с инфой «Отключить использование FIFO» где и что почитать, спасибо
Здравствуйте, Targutay, Вы писали:
убедительная просьба следить за объемом цитирования — модератор
T>Здравствуйте, Leo Yuriev, спасибо за ответ
T>еще вопрос , а как можно изменить значение старших битов регистра FCR???... << RSDN@Home 1.2.0 alpha rev. 648>>