Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Хитрая ошибка USB драйвера


Автор: Zhaw 7.7.2008, 11:37
Дано: Взят пример из DDK - bulkusb драйвер, скомпилирован и установлен - работает все ОК. (Создаются 4 pipe - 2 bulk - in/out, 2 service in/out).
Поправлено в исходном - только PID и VID (ну и GUID) устройства. В качестве железки - контроллер (M16C62) через USB контроллер (PDIUSBD12 - Philips) - для него взят стандартный код, поставлявшийся на сайте производителя (где то в глубине).
Проблема:Если передавать данные блоками больше чем 2*256 байт - то при разворачивании других приложений во время передачи ряда таких блоков (перемежаются передачи по sevice и по bulk) - приложение в винде ловит принятие 0 байт и затыкается. Если блоки по 512 байт или меньше (256) - то все отлично. Если во время передачи не трогать другие приложения (а спокойно смотреть на бегущий прогресс-бар - кстати - вызывается это дело из Дельфей через интерфейсную dll-ку) - то все тоже ок.
Вопрос: Хотя бы подскажите где можно начать копать? Где есть какие таймеры/ограничения по времени реакции в драйвере (или это чей-то буфер у железа затыкается)?

Автор: Fixin 7.7.2008, 19:46
Цитата(Кто-то сказал)
Телепатов нет
Всегда гораздо проще начать диалог, если все-же есть предмет разговора. Продемонстрируйте исходники.

Превая мысль по описанию - слишком большой расход системных ресурсов... какова загрузка ЦП во время передачи данных?

Автор: Zhaw 8.7.2008, 08:10
Fixin, конечно счас поделюсь исходниками. 
Само приложение больно здоровое, на Дельфях и отчасти коммерческая тайна smile но всю работу оно ведет через интерфейсную dll -
http://zhaw.newmail.ru/USbLink6.rar - тут dll-ка доступа, у которой вызываются сначала InitUSB, потом SendServiceBuffer/CheckServiceBuffer , потом уже собс-но данные о которых разговор передаются с помощью последовательного вызова SendServiceBuffer, CheckServiceBuffer и двух или более вызовов CheckBulkBuffer (первый вызов 256 байт, остальные >512).
Драйвера: http://zhaw.newmail.ru/drivers.rar Код железки могу тоже выложить - если оно надо (там просто некоторая специфика - код под контроллер М16С62....)
В момент передачи скачка загруженности не наблюдается, но по ощущениям некоторое подтормаживание есть (как проседание фпс-а в шутерах....), если открывать/закрывать вин-эксплорер - то все нормально - не срывается (ну или что нить такое же легкое).
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)