| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Ускорить работу виртуального COM порта |
| Автор: semibug 20.9.2010, 16:26 |
| Суть такова. Custom USB-устройство определяется как последовательный порт через стандартный виндовый драйвер. На устройство постоянно подается поток данных. Сейчас прокачивается примерно около 150 килобайт в секунду, что ниже пропускной способности USB шины. В какую сторону покапать, что бы добиться более высокой скорости? |
| Автор: semibug 21.9.2010, 08:41 |
| GremlinProg, производитель рекомендует стандартный виндовый драйвер usbser.sys. Само устройство может работать быстрее, т.к. я пробовал написать под него прошивку с транспортом по bulk на 64 байта и драйвер под windows. Результаты - около 800 кб/с. Но это требует перепрошивки устройства, что не совсем удобно (стоит цель работать сразу с устройствами из коробки без обновления Firmware). Т.е. похоже, что железка теоретически может глотать данные, но винда не хочет засылать большое кол-во данных в последовательный порт. |
| Автор: icecrashldr 21.9.2010, 17:26 |
| Какая функция используется для отсылки данных\приема? ReadFile\ReadFileEx WriteFile\WriteFileEx ? Последний раз несколько месяцев писал USB network скорость была свыше 100 мбит\с Может стоит USB hub поменять? |
| Автор: semibug 21.9.2010, 17:30 |
| icecrashldr, последовательный порт открываю через CreateFile( "\\.\COM1" ), пишу с помощью WriteFile. Скорости 100 мб/с в моем случае не достичь, т.к. железка не работает на HighSpeed. |
| Автор: icecrashldr 21.9.2010, 18:03 | ||
| HighSpeed - это не очень хорошо... WriteFile заменить на WriteFileEx c APC . Псевдо
Почему? Об реализации в недрах винды WriteFile - не оптимально Формирует запрос к драйверу Отсылка запрос + ожидания ответа. DRIVER Отсылает данные на устройство Ждем окончания говорит на USER level запись завершена. Получили ответ, удаляет временные переменные, и выход из функции. WriteFileEx - оптимально Формирует запрос к драйверу Отсылка запрос. Выход из функции для посылки следующих пакетов, но в это время драйвер уже отсылает данные на устройство. После того как мы послали N количество запросов, наконец токи в ответ мы получаем информацию о завершении посылки данных. Получим инфу в колбеки. Вообще детальней сейчас отписать не могу, так как на работе. |
| Автор: semibug 22.9.2010, 18:42 |
| icecrashldr, спасибо. Попытаюсь писать через WriteFileEx. |