Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программа в ХР глючит - в W98 нормально работает.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
plombir
Столкнулся с такой проблемой на WinXP:
Управляю внешним устройством на ATmega через СОМ порт (Delphi 7). С эмулировал на нём SPI. Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками. На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно, исправно.
Что делал:
Приоритетами игрался. От мин. к реалтайм.
В свойствах exe файла включал совместимость с другими ОС.
Результат - ничего не помогло.
Заметил, после перезагрузки XP, первые несколько минут, работает нормально. Потом - полный финиш...

Посоветуйте, на что обратить внимание, в каком месте искать Новогоднюю biggrin.gif собаку.

P.S. под WIN98 работает в 2 раза! быстрее, чем под XP...

Всех с наступившим Новым Годом!
fantasy
Обращение к COM-порту осуществляете через какую функцию API?
В принципе в NT-системах (к которым как раз и относится WinXP) без специального драйвера из программ допускается только работа через WriteFile-ReadFile, т.е. как с файлом. При этом как раз работа осуществляется через системный буфер, который и задаёт "тормоза", при этом скорость обмена можно увеличить только увеличивая размер передаваемых пакетов данных.

Наиболее кардинальный путь решения - писать свой драйвер, который работает в нулевом кольце защиты, и "дёргать" ногами интерфейса через IN-OUT как захочется. Получится оч. быстро наиболее грамотно.
Из других решений есть вариант с использованием программ, которые "разрешают" программам пользователя напрямую обращаться к портам ввода-вывода, однако сам с такими не работал, поэтому ничего конкретного не порекомендую. По моему мнению - оч. кривой вариант.
Ну и последний вариант - смастерить простейший переходник COM-SPI rolleyes.gif - конференция ведь в целом по электронике...
plombir
Программа уже написана и работает. Но в ХР глючит, как я выше описал, а в W98 нормально работает. Заказчику, для которого это сделано, не хотелось бы говорить, что сей девайс и софт к нему корректно работает под W98, а вот под XP возможны проблемы с удлинением времени процесса.
Цитата
Обращение к COM-порту осуществляете через какую функцию API?
Через стандартные CreateFile, EscapeCommFunction, WaitCommEvent и т.п. Используется стандарный компонент для Delphi.
Цитата
...драйвер, который работает в нулевом кольце защиты...
А что это за кольцо? Где об этом почитать? А реализовать его на С++ или Delphi реально?

Заранее, благодарен.
plombir
2 fantasy!
Спасибо, огроменное!
Нулевое кольцо - то что надо. Раньше о нем не слышал. "Капнул" в инете - нашел, то что надо. Придется, правда ядро NT с перехватом API изучать, но главное нашел! направление для моей проблемы.
Теперь из третьего кольца будем в нулевое стучаться biggrin.gif

С Новым Годом! тебя. Еще раз, спасибо.

ЗЫ. Больше недели общался в разных форумах и ничего, только здесь подсказали... biggrin.gif biggrin.gif biggrin.gif
fantasy
smile.gif Всегда пожалуста! Рад, что помог.
_artem_
vieto esli ne xotite velosiped izobretat , est takaya programma - "giveio" ili ego analog tot chto avreal ispolzuet . U nix dolzen bit API i oni vidayut dostup dlja user programmi k trebuemim portam . I nicego pisat ne nado .
DSIoffe
Цитата
est takaya programma - "giveio"

Присоединяюсь. Там и API нет, пишешь один раз CreateFile, а потом используешь те же команды доступа к портам in и out, что и в W98.
И не нужно пользоваться WinAPI, которые могут быть себе на уме.
Прикладываю его сюда. Он маленький, инструкция там же.
plombir
Вот я что по этой теме нашел.
Компонент "DriverLINX Port IO Driver wrapper component" для delphi, c++ с исходниками.
Нажмите для просмотра прикрепленного файла
Он немного великоват, но стоит того...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.