стоит ли использовать драйверы ядра при работе с COM-портом?

Тема в разделе "WASM.BEGINNERS", создана пользователем donaire, 28 апр 2006.

  1. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    Работаю постоянно с COM-портами, опрос различных устройств, датчиков, контроллеров. Улучшит ли работу (скорость) использование для считывания-записи данных драйвера?
     
  2. 1BB253E

    1BB253E New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2006
    Сообщения:
    10
    Возьми и протестируй.
     
  3. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    А для этого месяц разбирайся с ком-портом (драйвером)?*)))

    Было бы время, будет попробую.

    Я думал может кто делал и что получилось. Если получилось быстрее, тогда можно попробовать законно*))
     
  4. 1BB253E

    1BB253E New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2006
    Сообщения:
    10
    Я могу кинуть сэмплы работы в асинхронном режиме с использованием апи. Кстати литературы море и она доступна =)



    ИМХО: начинать надо с простых вещей.
     
  5. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    Спасибо! АПИ для меня освоенная тема в некотором роде. Я постоянно тестирую разные устройства по СОМ-порту (контроллеры), вот думал для этого может драйвер даст плюсы в работе. По портам лит-ры море, а вот по кернел драйверам портов не море, хотя что-то вроде видел в рекламе издательства БХВ из Питера, не читали?
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    donaire

    Скорость так сильно не увеличишь. (А выше скорости обмена и вовсе не увеличишь:) ИМХО драйвер стоит делать только если устройство как-то там нестандартно с портом работет.
     
  7. 1BB253E

    1BB253E New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2006
    Сообщения:
    10
    donaire

    Нет, не читал, однозначно. Всё по МСДНам шарюсь...
     
  8. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    Это вы о чём?
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    donaire

    На некоторых ноутбуках нет вообще COM-портов, зато есть USB. Для подключения контроллеров и прочих COM-совместимых игрушек, приходится устанавливать переходники USB->COM или USB->LPT. Программирование такого псевдо-порта через API (CreateFile, ReadFile, WriteFile) зачастую работает, а через собственный драйвер - нет, т.к. порт на самом деле USB. Так что с точки зрения совместимости лучше API. И прав администратора не нужно для использования. С драйвером больше возни, нужны права админа, совместимость может страдать со всякими нестандартными портами и с разными версиями винды. Скорость, конечно, может немного возрасти, но стоит ли оно таких затрат?
     
  10. donaire

    donaire New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    25
    Адрес:
    k-jarve
    Спасибо за ответы!
     
  11. AlexDon

    AlexDon New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2006
    Сообщения:
    6
    Как раз для такого случая пишу программу, которая является переходником между DOS под VMWare и преобразователем USB-COM. Алгоритм простой: программа связана с VMWare через named pipe, и переправляет поток данных из pipe в COM, а также из COM в pipe. Поток, отвечающий за передачу из pipe в COM имеет примерно следующую последовательность действий:

    for (;;) {
    ReadFile (hPipe,buf,...,&ovr);
    waitfor (ovr.handle,INFINITE);
    GetOverlappedResult (...);
    WriteFile (hCOM,buf,..,&ovr1);
    }

    Вопрос в том, как оптимизировать этот поток. ReadFile всегда получает за раз только 1 байт. Скорость получения байта от pipe примерно в 3 раза выше, чем скорость COM-порта (такова особенность VMWare).
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AlexDon
    Читать и писать асинхронно.
     
  13. AlexDon

    AlexDon New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2006
    Сообщения:
    6
    Из приведенного мною примера и так видно, что чтение и запись происходит асинхронно. Вопрос намного "тоньше": если я читаю и пишу по 1 байту, то это гораздо медленне, чем, если вычитать всю посылку из pipe, а затем передать на запись в виртуальный COM-порт. Какова оптимальная длина записи, для вывода в виртуальный COM-порт?
     
  14. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    Если тебя не устраивает именно низкая скорость передачи данных (макс 115200 кБит/с), то тебе прямая дорога вот сюда:
    http://www.rippstein.net/HiSerialEN.htm
    Дело в том, что УАРТ на большинстве мамок апаратно позволяет иметь скорость вплоть до 921600 кБит/с и этот драйвер такую возможность открывает.
     
  15. AlexDon

    AlexDon New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2006
    Сообщения:
    6
    Ну, это один из вариантов... Хотелось бы все таки получить ответ на мой вопрос: какая длина записи оптимальна для вывода в виртуальный COM-порт?
     
  16. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    Чем дольше, тем лучше, IMHO :)
    ReadFile всегда получает ровно столько, сколько есть в буфере порта (если твой буфер заведомо больше)
    Чесно говоря, не совсем понял зачем этот изврат нужен. С USB-шным СОМ портом тоже можно общатся теми же стандартными API. К тому же они как правило поддерживают бОльшую чем 115200 скорость без вмешательства всяких там HiSerial.sys
     
  17. AlexDon

    AlexDon New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2006
    Сообщения:
    6
    Дело в том, что все это нужно для работы с PC-совместимымми контроллерами, которые работают под DOS. Есть ПО, которое позволяет подключать контроллер, как диск через COM-порт, и это по работает под DOS. Также приходится использовать удаленную отладку с помощью turbo-debug 3.1 от Borland. Все это работает по DOS. А в качестве инструментальной машины нужно использовать Notebook, который без COM-порта...