Windows не очищает COM-буфер

Я вижу довольно странное поведение из окон в отношении моих COM-буферов.

Я использую 3 USB-Serial Converter с чипами FTDI. Я открываю com-порты с помощью CreateFile, и все работает нормально. Все 3 порта имеют одинаковую конфигурацию, за исключением скорости передачи данных. 2 работают на 38400 и один на 9600.

Вот странная часть:

Я могу успешно писать из порта 9600 и одного из портов 38400. Кажется, что вторые порты 38400 буферируют данные. Я подключился к этому порту с помощью Hyperterminal и вижу, что на рабочих портах я сразу получаю ответ, а на «странном» порте я получаю данные только тогда, когда закрываю свое приложение ...

Кто-нибудь еще испытал это? Как вы это решили?


person RedX    schedule 13.05.2011    source источник
comment
возможный дубликат как очистить последовательный буфер?   -  person sehe    schedule 13.05.2011
comment
Не дубликат - это вопрос о чтении, а не о письме.   -  person MSalters    schedule 13.05.2011


Ответы (2)


Это своего рода выстрел в темноту ... но.

Проверьте настройки управления потоком для обоих концов "странного" соединения. Я видел такие странные вещи, когда управление потоком не соответствовало. Закрытие порта очищает биты и позволяет буферизованным данным течь.

person nathan    schedule 13.05.2011

Немного поработав с чипами FTDI, я предлагаю вам проверить расширенные настройки драйверов для каждого порта. Драйвер поддерживает как буферизацию, так и управление задержкой, чтобы вы могли найти компромисс между высокой пропускной способностью и низкой задержкой. Поэтому проверьте настройки, которые работают, и используйте их для тех, которые не работают (если они не совпадают).

Кстати, с помощью собственного API от FTDI вам не нужно отслеживать переназначение COM-порта и тому подобное. API очень похож на обычный Win32, но предоставляет больше параметров конфигурации.

person Andreas Magnusson    schedule 15.05.2011
comment
очень красиво, но приложение готово. Если мне когда-нибудь понадобится что-то изменить, я могу это использовать. Спасибо. - person RedX; 16.05.2011