|
Я, конечно, не Кашперовский - :-))
могу дать только общие рекомендации.
1. У вас в драйвере используется timeout при обращении DeviceIoControl?
2. Доступ к endpointam идет ли через CreateFile или используете тот же DeviceIoControl?
BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped - тут для timeout
);
3. Как у вас выполнена схема источника? Насколько запас есть от перепадов (spikes) входного напряжения?
Защитные диоды используются только для защиты от перенапряжения (например, статика) - они тебе не помогут.
Скорее всего вылетает процессор.
Потеря информации в Bulk передаче не является катастрофой - это предусмотрено спецификацией.
Теперь смотри мои комментарии по тексту:
--------------------------------------------------------------
1. В какие то моменты, как фоновая задача, идут команды по изменению
режимов, настроек, получению статусов. Вот так все крутится.
Однако редко происходят сбои и сбор с передачей зависает.
Надо выключать прибор и снова включать. Процесс сбора может
непрерывно продолжаться и час и два и три.
2. Также практически сразу
вырубает сбор включение/выключение рядом других измерительных
приборов.
-----------------------------------------------------------------
В первом и во втором случае причина может быть зависание процессора.
Допустим, что процессор сбойнул, и остался ждать управления по Endpoin0 (Control)
Допустим, что процессор сбойнул и по каким-то причинам не может продолжить передачу Bulk.
Если драйвер не имеет TimeOut и использует тот же вход DeviceIoControl, то будете ждать вечно!
Так как, произойдет блокировка запросов на уровне драйвера.
Чтобы ответить квалифицорованно мне нужна информация как выполнен драйвер в указанном контексте.
Тогда можно будет предложить workarond от сбоев.
E-mail: info@telesys.ru