Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись больших объёмов данных в виртуальный COM-порт  (Прочитано 11293 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
WWX
Постоялец

ru
Offline Offline

« : 28-01-2021 14:43 » 

Доброго времени суток.

Есть устройство, работающее через USB.
При подключении к хосту видится как виртуальный COM-порт.

Запись данных производится ф-цией "WriteFile".
Запись данных размером до 4 МБ происходит без ошибок.

При попытке записать большее количество данных (за один вызов "WriteFile") на некоторых ПК возникает ошибка:
87 (ERROR_INVALID_PARAMETER).
А на остальных ПК удаётся записать (за один вызов "WriteFile") до 512 МБ (больше пытаться записывать не имеет смысла).

Т. е. на двух ПК с Windows 7 ошибка стабильно проявляется (ни разу не записалось больше 4 МБ за один вызов).
На двух других ПК с мультизагрузкой: На Windows 7 нет ошибок (записывается до 512 МБ); На Windows 10 ошибка стабильно проявляется (ни разу не записалось больше 4 МБ за один вызов).

В чём может быть причина ошибки?

(Каких-либо специальных настроек COM-порта после открытия ф-цией "CreateFile" не делаю, но обе структуры "DCB" и "COMMPROP" абсолютно одинаковы как на ПК на котором всё работает, так и на ПК, на котором большие размеры данных не передаются.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-01-2021 04:44 » new

WWX, нужно пытаться записывать мЕньшими кусками (скажем, по 4кб). При возникновении ошибки, думаю, нужно чуть выждать (1 мс ?) и снова повторить отправку пакета, то есть не прерывать общий прогресс
Записан

WWX
Постоялец

ru
Offline Offline

« Ответ #2 : 29-01-2021 07:47 » 

Спасибо за ответ.

Похоже, что так и придётся делать, но меня смущает тот факт, что это проявляется не на всех ПК.
(И даже на одном ПК может проявляться в зависимости от ОС (Windows 7 или Windows 10).)

И выглядит это так, что ОС сама (по каким-то ведомым ей одной причинам) кочевряжится отправлять более 4 МБ за один вызов "WriteFile". Аппаратура тут вроде бы не при чём.
Возможно где-то в реестре (или ещё где) есть соответствующая настройка, но это только предположение.
Если бы где-то в документации что-то было бы сказано по этому поводу... но найти что-то не получилось.

("ReadFile" при этом нормально считывает размеры до 512 МБ (на всех подопытных ПК).)
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #3 : 29-01-2021 09:11 » 

Возможно драйвера этого самого виртуального COM-порта разные. Плюс, сам стек USB скорее всего разный в Windows 7 и Windows 10.
Записан
WWX
Постоялец

ru
Offline Offline

« Ответ #4 : 29-01-2021 11:48 » 

На самом деле на всех подопытных Windows 7 драйвера (usbser.sys) одинаковые на бинарном уровне. Версии в диспетчере устройств тоже одинаковые (иначе, впрочем, и быть не могло).
Не совсем понятно, при чём здесь USB стек. Смотрел шину USB-анализатором - в случае ошибки 87 (ERROR_INVALID_PARAMETER) на шине ничего не происходит, система даже не пытается ничего передавать в устройство.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #5 : 29-01-2021 11:54 » 

Возможно я Вас неправильно понял. Я так понял, что в Windows 7 работает, в Windows 10 - нет. Думаю, что в Windows 7 и Windows 10 разные и стеки USB (программные), и, возможно разные драйвера. И кто-то из них анализирует размер выдаваемых данных и даёт указанную Вами ошибку.
Записан
WWX
Постоялец

ru
Offline Offline

« Ответ #6 : 29-01-2021 12:54 » 

Не совсем так.

На некоторых Windows 7 работает, на некоторых - нет (ошибка 87 (ERROR_INVALID_PARAMETER)). (При этом драйверы у них одинаковые.)
На всех Windows 10, на которых проверял (на текущий момент их целых три штуки) - не работает (та же самая ошибка).
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines