Цитата(qqqqqq @ Oct 24 2007, 15:01)

Попробую EZUSB...
попробовал EZUSB. сразу получилось около 1.9 мс, но иногда (достаточно редко) бывает и до 4мс.
Т.е. по латентности этот драйвер шустрее CYUSB в десятки раз..
Этот результат получен при включенном отладочном протоколировании.
Вот протокол драйвера:
0.00001090 IRP_MJ_DEVICE_CONTROL
0.00002403 enter Ezusb_Read_Write()
0.00003632 enter Ezusb_CallUSBD
0.00004889 Calling USB Driver Stack
тут ок. 70 мкс передаём запрос на запись шинному драйверу
0.00012599 return from IoCallDriver USBD 103
0.00013689 Wait for single object
тут 140 мкс ждём, когда шинный драйвер обработает запрос
0.00027797 Wait for single object, returned 0
0.00029026 URB status = 0 status = 0 irp status 0
0.00030143 exit Ezusb_CallUSBD (0)
0.00031373 Successfully transfered 0xa bytes
тут где-то 650мкс мы пребывали в диспетчере ВВ (в приложении между двумя DeviceIOControlами находятся с десяток ассемблерных команд (PUSH в основном)) И это при прямом методе (METHOD_IN_DIRECT, METHOD_OUT_DIRECT) общения с драйвером.
0.00095990 IRP_MJ_DEVICE_CONTROL
0.00097191 enter Ezusb_Read_Write()
0.00098281 enter Ezusb_CallUSBD
0.00099482 Calling USB Driver Stack
ок. 90 мкс передаём запрос на чтение шинному драйверу
0.00108338 return from IoCallDriver USBD 103
0.00109427 Wait for single object
180 мкс ждём, когда шинный драйвер обработает запрос
0.00127390 Wait for single object, returned 0
0.00128620 URB status = 0 status = 0 irp status 0
0.00129709 exit Ezusb_CallUSBD (0)
0.00130855 Successfully transfered 0xa bytes
и где-то 170 мкс находимся в драйвере EZUSB (в основном выдаём отладочные сообщения)
Плюс в лог не вошло время входа в первую функцию и выхода из второй - ещё 650 мкс в дисп. ВВ.
Итого получается 1.95 мс, как и измерилось приложением.
По итогам данного измерения можно резюмировать, что основную задержку даёт микрософтовский диспетчер ввода-вывода...
Осталось его как-то обойти и латентность уменьшится ещё в несколько раз. до полмиллисекунды.