Здравствуйте все! Начал тут отлаживать обмен своей железяки путем написания консоли. обмен на скорости 600 бод пакетами до 20 байт. пауза между пакетами (запрос - ответ) не более 100 мс. Принимаю так: - в цикле пытаюсь считать по одному байту (в заголовке есть длинна пакета) - как только набрался пакет - разбираю его в (switch по заголовку) и генерю ответ.
Проблема в следующем: подряд принимаются первые 7-8 байт (вместе с заголовком). потом следуют пустые запросы - нет данных на прием (около 100 мс). потом сваливается вторая половина пакета подряд. данные в шине идут без этого разрыва (смотрел осцилографом). соответстенно не успеваю ответить в положенные 100 мс.
Пробовал принимать так: - в цикле принимаю по одному байту заголовок и длинну, потом пытаюсь считать данные одним блоком ReadFile, задав ожидаемое число байт в параметрах. Соответственно задаю параметры структуры COMMTIMEOUTS. При любых значених поля ReadIntervalTimeout меньше 100 (кроме 0 соответственно) ReadFile вылетает по таймауту и возвращает, что считала те же 6 байт из нужных, например 14. при значениях 0 и более 100 она таки дожидается весь пакет.
Теперь вопрос: откуда такая конская задержка вылазит и как от нее избавиться?)
Сообщение отредактировал Reuk - Jan 31 2011, 08:07
|