Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк девайсов с програмным USB драйвером на двоядерных ПК
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
Br.Misha
Привет!
У меня уже третий год стоит комп с одноядерным процессором но позавчера купил ноут с двоядерным.
Подключил я один девайс (делаю его на заказ) к ноуту у тут выскочила какая то ошибка связана с libusb0.dll. Это при том, что на одноядерном(и не только на моем) все работало отлично уже дня 4 (девайс постоянно подключен к компу). Потом я пошелс ноутом в одну лабораторию, которой в подарок сделал устройство для контроля лаюораторных стендов с отображением инфы на компе. Препод который там сидел, сказал что девайс до сих пор отлично работает и иразу небыло никаких сбоев, комп у в лаборатории тоже с одноядерным. Подключил я вместо компа свой ноут у тут опять выскочила ошибка с libusb0.dll, потом притащили в лабораторю стационарный комп с двоядерным проциком - проблема та же.
Симптомы: после такого глюка девайс виден в диспетчере но моя программа для хоста его не видит, рестарт программы не помогает, только дисконект устройства.
Вобщем прошу помощи. Мож у кого нить была похжая ошибка? напишите плиз, даже еси есть какие нить догадки. Просто мне проет нужно во вторник сдавать а он не работает на двоядерках...
Спасибо!
sergeeff
Вы бы хоть что-нибудь про драйвер вашего устройства написали? Мы используем bulk драйвер на основе примера из DDK и не было замечено подобных проблем под windows 2000/xp/vista/7 в независимости от типа процессора.
Goodefine
Цитата(Br.Misha @ Oct 1 2010, 15:22) *
... тут выскочила какая то ошибка связана с libusb0.dll...

Очень информативно... Что за ошибка?
Причем здесь двухъядерность непонятно. Какая ось, на чем пишете? На 95% глюки в программе хоста. Покажите как используете dll. Сейчас глянул, точно два ядра - и все работает...
prottoss
Цитата(Br.Misha @ Oct 1 2010, 19:22) *
У меня, правда, двыядерный, но тоже без проблем третий год... Драйвер - штатный Windows - usbser.sys
rezident
Цитата(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

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

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

Это не баг, а документированная особенность. Для декодера RC5 использовать прерывания совсем необязательно. Для латания дыр разрешать вложенные, тем более. Достаточно анализировать соответствующие аппаратные флаги. У меня распознает "по честному" пять разных протоколов без единого прерывания...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.