реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Глюк девайсов с програмным USB драйвером на двоядерных ПК, ОЧЕНЬ СИЛЬНО НУЖНА ПОМОЩЬ!
Br.Misha
сообщение Oct 1 2010, 12:22
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Привет!
У меня уже третий год стоит комп с одноядерным процессором но позавчера купил ноут с двоядерным.
Подключил я один девайс (делаю его на заказ) к ноуту у тут выскочила какая то ошибка связана с libusb0.dll. Это при том, что на одноядерном(и не только на моем) все работало отлично уже дня 4 (девайс постоянно подключен к компу). Потом я пошелс ноутом в одну лабораторию, которой в подарок сделал устройство для контроля лаюораторных стендов с отображением инфы на компе. Препод который там сидел, сказал что девайс до сих пор отлично работает и иразу небыло никаких сбоев, комп у в лаборатории тоже с одноядерным. Подключил я вместо компа свой ноут у тут опять выскочила ошибка с libusb0.dll, потом притащили в лабораторю стационарный комп с двоядерным проциком - проблема та же.
Симптомы: после такого глюка девайс виден в диспетчере но моя программа для хоста его не видит, рестарт программы не помогает, только дисконект устройства.
Вобщем прошу помощи. Мож у кого нить была похжая ошибка? напишите плиз, даже еси есть какие нить догадки. Просто мне проет нужно во вторник сдавать а он не работает на двоядерках...
Спасибо!
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 1 2010, 13:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Вы бы хоть что-нибудь про драйвер вашего устройства написали? Мы используем bulk драйвер на основе примера из DDK и не было замечено подобных проблем под windows 2000/xp/vista/7 в независимости от типа процессора.
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Oct 1 2010, 13:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Br.Misha @ Oct 1 2010, 15:22) *
... тут выскочила какая то ошибка связана с libusb0.dll...

Очень информативно... Что за ошибка?
Причем здесь двухъядерность непонятно. Какая ось, на чем пишете? На 95% глюки в программе хоста. Покажите как используете dll. Сейчас глянул, точно два ядра - и все работает...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 1 2010, 13:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Br.Misha @ Oct 1 2010, 19:22) *
У меня, правда, двыядерный, но тоже без проблем третий год... Драйвер - штатный Windows - usbser.sys


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 1 2010, 14:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Br.Misha @ Oct 1 2010, 18:22) *
Мож у кого нить была похжая ошибка?
"Похожая" это какая именно? Вы же ничего не описали толком.
Цитата(Br.Misha @ Oct 1 2010, 18:22) *
Просто мне проет нужно во вторник сдавать а он не работает на двоядерках...
Ну попробуйте отключить второе ядро, раз так спешно. В файле boot.ini в опциях загрузки системы добавьте ключик /ONECPU Строчка должна выглядеть примерно так
Цитата
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="M$ Windows XP Pro RU ONECPU" /noexecute=optin /fastdetect /usepmtimer /ONECPU

Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Oct 2 2010, 09:42
Сообщение #6


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



В этом же девайсе есть ПДУ с RC5. Как оказалось(тестировал), устройство дисконектится когда я долго держу нопку на ПДУ.
Вот в чем была суть проблемы:
Как известно, при вызове прерывания программа переходит к обработчику прерывания, автоматически отключаются все прерывания и включаются только после завершения обработчика. Но для нормальной работы прогрмного драйвера ЮСБ, прерывания нельзя запрещать более чем на 30 циклов (при 16 мгц), хотя на некоторых устройствах я запрещал и на пол секунды но девайсы работали нормально, дисконекта не было. Но почему то в этом устройстве как раз и вылез этот баг .
Вобщем я в самом начале обработчиков прерываний TIMER1_CAPT_vect и TIMER1_COMPA_vect, которые вызываются при приеме комманд с ПДУ, написал sei(); и проблема ищезла.

Ну вобщем вродебы все прояснилось, но остается одна загадка: почему девайс до исправления бага нормально работал на всех одноядерных компах и на двух и более - нет?
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Oct 2 2010, 10:46
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Br.Misha @ Oct 2 2010, 12:42) *
Но для нормальной работы прогрмного драйвера ЮСБ, прерывания нельзя запрещать более чем на 30 циклов (при 16 мгц), хотя на некоторых устройствах я запрещал и на пол секунды но девайсы работали нормально, дисконекта не было. Но почему то в этом устройстве как раз и вылез этот баг .

Это не баг, а документированная особенность. Для декодера RC5 использовать прерывания совсем необязательно. Для латания дыр разрешать вложенные, тем более. Достаточно анализировать соответствующие аппаратные флаги. У меня распознает "по честному" пять разных протоколов без единого прерывания...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016