[an error occurred while processing this directive] [an error occurred while processing this directive]
Полностью согласен. Надо только правильно сделать управление потоком, по возможности - аппаратно.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Виноградов Алексей 23 февраля 2002 г. 11:08
В ответ на: Ответ: отправлено Elektronik 23 февраля 2002 г. 08:11

Я делал так. Когда приемный буфер машины (по умолчанию буфер драйвера - почти всегда 4096 байт) заполнен более чем на 4000 байт, внешнему дивайсу на АВР выдается RTS = 1 - хост не готов к приему. Соответственно дивайс обязан притормозить передачу, чтобы не было переполнений.Точно так же и дивайс может выставить хосту RTS = 1, когда он сам не готов к приему. Здесь возникает хитрый прикол. После выдачи этого сигнала хост под Виндой еще некоторое время может передавать. Обычно он успевает передать не более 32 ... 60 байт. Этот хвост надо ловить, что я и делаю. Окончание хвоста в АВР-ке определяю по тайм-ауту (я выбрал отсутствие приема в течение 20 миллисекунд.). Работает, и вроде бы ничего не теряется. Добавлю, что в машине есть ФИФО на прием - по умолчанию 14 байт. Ему вообще чхать на операционку. А сделан он там для того, чтобы ничего не терялось ...

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru