Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорить работу виртуального COM порта 
:(
    Опции темы
semibug
Дата 20.9.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Суть такова. Custom USB-устройство определяется как последовательный порт через стандартный виндовый драйвер. На устройство постоянно подается поток данных. Сейчас прокачивается примерно около 150 килобайт в секунду, что ниже пропускной способности USB шины.
В какую сторону покапать, что бы добиться более высокой скорости?


Это сообщение отредактировал(а) semibug - 20.9.2010, 16:40
PM   Вверх
GremlinProg
Дата 21.9.2010, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(semibug @  20.9.2010,  18:26 Найти цитируемый пост)
В какую сторону покапать, что бы добиться более высокой скорости?

зайти на сайт производителя, поискать дрова на свою модель

если скорость осталась прежней, значит скорее всего устройство просто не может изрыгать данные быстрее вследствии каких-то причин, не зависящих транспорта, например: сложность алгоритмов их расчета, медленный вычислитель, неоптимальные алгоритмы и т.п.

тогда тут максимум что можно сделать:
 - обновить по возможности прошивку устройства
 - взять другую модель


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
semibug
Дата 21.9.2010, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



GremlinProg, производитель рекомендует стандартный виндовый драйвер usbser.sys.
Само устройство может работать быстрее, т.к. я пробовал написать под него прошивку с транспортом по bulk на 64 байта и драйвер под windows. Результаты - около 800 кб/с. Но это требует перепрошивки устройства, что не совсем удобно (стоит цель работать сразу с устройствами из коробки без обновления Firmware). Т.е. похоже, что железка теоретически может глотать данные, но винда не хочет засылать большое кол-во данных в последовательный порт.

PM   Вверх
icecrashldr
Дата 21.9.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



Какая функция используется для отсылки данных\приема?
ReadFile\ReadFileEx
WriteFile\WriteFileEx
?

Последний раз несколько месяцев писал USB network скорость была свыше 100 мбит\с
Может стоит USB hub поменять?
PM MAIL WWW   Вверх
semibug
Дата 21.9.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



icecrashldr, последовательный порт открываю через CreateFile( "\\.\COM1" ), пишу с помощью WriteFile.
Скорости 100 мб/с в моем случае не достичь, т.к. железка не работает на HighSpeed.



Это сообщение отредактировал(а) semibug - 21.9.2010, 20:43
PM   Вверх
icecrashldr
Дата 21.9.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



HighSpeed - это не очень хорошо...


WriteFile заменить на WriteFileEx c APC .

Псевдо

Код

void FuncSenderByComPort()
{
     HANDLE hWaitEvents[] = {hEventStop, hComPort};
     OVERLAPPED overlapped; // надо установить callback.
     do
    { 
           // Здесь получаем сообщения из очереди, думаю как организовать очередь справитесь.
           WriteFileEx(hComPort, , , , , overlapped);
           WaitForMultipleObjectsEx(2, hWaitEvents, FALSE, INFINITE, TRUE); // WAIT_OBJECT_0 будет сигнализировать о выходе, WAIT_OBJECT_1 о заверщении записи.
     }while(true)
}


Почему?

Об реализации в недрах винды

WriteFile - не оптимально
         Формирует запрос к драйверу
         Отсылка запрос + ожидания ответа.
                     DRIVER
                            Отсылает данные на устройство
                             Ждем окончания
                             говорит на USER level запись завершена.
         Получили ответ, удаляет временные переменные, и выход из функции.
              
WriteFileEx - оптимально
                 Формирует запрос к драйверу 
                 Отсылка запрос. 
                 Выход из функции для посылки следующих пакетов, но в это время драйвер уже отсылает данные на устройство.
                 После того как мы послали N количество запросов, наконец токи в ответ мы получаем информацию о завершении посылки данных.
                 Получим инфу в колбеки.

Вообще детальней сейчас отписать не могу, так как на работе. smile
 
              





PM MAIL WWW   Вверх
semibug
Дата 22.9.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



icecrashldr, спасибо. Попытаюсь писать через WriteFileEx.


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.