|
|
  |
Глюк девайсов с програмным USB драйвером на двоядерных ПК, ОЧЕНЬ СИЛЬНО НУЖНА ПОМОЩЬ! |
|
|
|
Oct 1 2010, 13:16
|

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

|
Цитата(Br.Misha @ Oct 1 2010, 15:22)  ... тут выскочила какая то ошибка связана с libusb0.dll... Очень информативно... Что за ошибка? Причем здесь двухъядерность непонятно. Какая ось, на чем пишете? На 95% глюки в программе хоста. Покажите как используете dll. Сейчас глянул, точно два ядра - и все работает...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Oct 1 2010, 14:23
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 2 2010, 09:42
|
Местный
  
Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646

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

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

|
Цитата(Br.Misha @ Oct 2 2010, 12:42)  Но для нормальной работы прогрмного драйвера ЮСБ, прерывания нельзя запрещать более чем на 30 циклов (при 16 мгц), хотя на некоторых устройствах я запрещал и на пол секунды но девайсы работали нормально, дисконекта не было. Но почему то в этом устройстве как раз и вылез этот баг . Это не баг, а документированная особенность. Для декодера RC5 использовать прерывания совсем необязательно. Для латания дыр разрешать вложенные, тем более. Достаточно анализировать соответствующие аппаратные флаги. У меня распознает "по честному" пять разных протоколов без единого прерывания...
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|