[an error occurred while processing this directive] [an error occurred while processing this directive]
Противный и скользкий вопрос об управлении потоком на COM - порту (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Виноградов Алексей 21 сентября 2001 г. 22:38

Есть дивайс, подключаемый к этому порту, и прога на дельфи, которая с дивайсом взаимодействует. Управление потоком - RTS/CTS. Пересылаются в машину блоки по 16 килобайт, а размер приемного буфера драйвера - 4 килобайта. Так вот, отключаю в устройстве управление потоком, а данные не теряются !!! Странно. Становлюсь осциллографом на ножку RTS машины и вижу, что машина вовсю сигнализирует о том, что не готова к приему, но внешнее устройство этот сигнал игнорирует. И все равно блоки приходят целыми. Так происходит на разных компах под ВИН98 и ВИН2000. Так зачем же тогда управление потоком, если все итак
работает ???
Дальше, а что будет, если в момент прихода байта в порт машина занята, например, обрабатывается более приоритетное прерывание. Ясное дело - порт имеет буфер на пару десятков байт, которому чхать на системные прерывания. А драйвер получит управление и заберет потом свой байт. А если байт не один, а, положим, 100?
WINdows - многозадачная система, отнимающая управление у процессов независимо от их состояния. А если управление отнять у драйвера - что тогда? Таких вопросов немало. Вы можете возразить, что Windows не рассчитана на управление внешними установками в реальном времени, но все-таки, очень хотелось бы услышать толковый ответ на эти вопросы, например, от системного программиста. Сам я в защищенном режиме процессора на очень сведущ. С уважением, Алексей Виноградов

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

Ответы



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

E-mail: info@telesys.ru