[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Я делал так. Когда приемный буфер машины (по умолчанию буфер драйвера - почти всегда 4096 байт) заполнен более чем на 4000 байт, внешнему дивайсу на АВР выдается RTS = 1 - хост не готов к приему. Соответственно дивайс обязан притормозить передачу, чтобы не было переполнений.Точно так же и дивайс может выставить хосту RTS = 1, когда он сам не готов к приему. Здесь возникает хитрый прикол. После выдачи этого сигнала хост под Виндой еще некоторое время может передавать. Обычно он успевает передать не более 32 ... 60 байт. Этот хвост надо ловить, что я и делаю. Окончание хвоста в АВР-ке определяю по тайм-ауту (я выбрал отсутствие приема в течение 20 миллисекунд.). Работает, и вроде бы ничего не теряется. Добавлю, что в машине есть ФИФО на прием - по умолчанию 14 байт. Ему вообще чхать на операционку. А сделан он там для того, чтобы ничего не терялось ...
E-mail: info@telesys.ru