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

 
 
> Глюк девайсов с програмным 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
 
Start new topic
Ответов
Br.Misha
сообщение Oct 2 2010, 09:42
Сообщение #2


Местный
***

Группа: 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
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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 Текстовая версия Сейчас: 23rd July 2025 - 13:44
Рейтинг@Mail.ru


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