Перейти к содержанию
    

Программа в ХР глючит - в W98 нормально работает.

Столкнулся с такой проблемой на WinXP:

Управляю внешним устройством на ATmega через СОМ порт (Delphi 7). С эмулировал на нём SPI. Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками. На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно, исправно.

Что делал:

Приоритетами игрался. От мин. к реалтайм.

В свойствах exe файла включал совместимость с другими ОС.

Результат - ничего не помогло.

Заметил, после перезагрузки XP, первые несколько минут, работает нормально. Потом - полный финиш...

 

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

 

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

 

Всех с наступившим Новым Годом!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обращение к COM-порту осуществляете через какую функцию API?

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

 

Наиболее кардинальный путь решения - писать свой драйвер, который работает в нулевом кольце защиты, и "дёргать" ногами интерфейса через IN-OUT как захочется. Получится оч. быстро наиболее грамотно.

Из других решений есть вариант с использованием программ, которые "разрешают" программам пользователя напрямую обращаться к портам ввода-вывода, однако сам с такими не работал, поэтому ничего конкретного не порекомендую. По моему мнению - оч. кривой вариант.

Ну и последний вариант - смастерить простейший переходник COM-SPI :rolleyes: - конференция ведь в целом по электронике...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа уже написана и работает. Но в ХР глючит, как я выше описал, а в W98 нормально работает. Заказчику, для которого это сделано, не хотелось бы говорить, что сей девайс и софт к нему корректно работает под W98, а вот под XP возможны проблемы с удлинением времени процесса.

Обращение к COM-порту осуществляете через какую функцию API?
Через стандартные CreateFile, EscapeCommFunction, WaitCommEvent и т.п. Используется стандарный компонент для Delphi.

...драйвер, который работает в нулевом кольце защиты...
А что это за кольцо? Где об этом почитать? А реализовать его на С++ или Delphi реально?

 

Заранее, благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 fantasy!

Спасибо, огроменное!

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

Теперь из третьего кольца будем в нулевое стучаться :biggrin:

 

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

 

ЗЫ. Больше недели общался в разных форумах и ничего, только здесь подсказали... :biggrin::biggrin::biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

est takaya programma - "giveio"

Присоединяюсь. Там и API нет, пишешь один раз CreateFile, а потом используешь те же команды доступа к портам in и out, что и в W98.

И не нужно пользоваться WinAPI, которые могут быть себе на уме.

Прикладываю его сюда. Он маленький, инструкция там же.

giveio.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я что по этой теме нашел.

Компонент "DriverLINX Port IO Driver wrapper component" для delphi, c++ с исходниками.

dlportio.zip

Он немного великоват, но стоит того...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...