plombir 0 1 января, 2006 Опубликовано 1 января, 2006 · Жалоба Столкнулся с такой проблемой на WinXP: Управляю внешним устройством на ATmega через СОМ порт (Delphi 7). С эмулировал на нём SPI. Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками. На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно, исправно. Что делал: Приоритетами игрался. От мин. к реалтайм. В свойствах exe файла включал совместимость с другими ОС. Результат - ничего не помогло. Заметил, после перезагрузки XP, первые несколько минут, работает нормально. Потом - полный финиш... Посоветуйте, на что обратить внимание, в каком месте искать Новогоднюю собаку. P.S. под WIN98 работает в 2 раза! быстрее, чем под XP... Всех с наступившим Новым Годом! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fantasy 0 1 января, 2006 Опубликовано 1 января, 2006 · Жалоба Обращение к COM-порту осуществляете через какую функцию API? В принципе в NT-системах (к которым как раз и относится WinXP) без специального драйвера из программ допускается только работа через WriteFile-ReadFile, т.е. как с файлом. При этом как раз работа осуществляется через системный буфер, который и задаёт "тормоза", при этом скорость обмена можно увеличить только увеличивая размер передаваемых пакетов данных. Наиболее кардинальный путь решения - писать свой драйвер, который работает в нулевом кольце защиты, и "дёргать" ногами интерфейса через IN-OUT как захочется. Получится оч. быстро наиболее грамотно. Из других решений есть вариант с использованием программ, которые "разрешают" программам пользователя напрямую обращаться к портам ввода-вывода, однако сам с такими не работал, поэтому ничего конкретного не порекомендую. По моему мнению - оч. кривой вариант. Ну и последний вариант - смастерить простейший переходник COM-SPI :rolleyes: - конференция ведь в целом по электронике... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plombir 0 1 января, 2006 Опубликовано 1 января, 2006 · Жалоба Программа уже написана и работает. Но в ХР глючит, как я выше описал, а в W98 нормально работает. Заказчику, для которого это сделано, не хотелось бы говорить, что сей девайс и софт к нему корректно работает под W98, а вот под XP возможны проблемы с удлинением времени процесса. Обращение к COM-порту осуществляете через какую функцию API? Через стандартные CreateFile, EscapeCommFunction, WaitCommEvent и т.п. Используется стандарный компонент для Delphi. ...драйвер, который работает в нулевом кольце защиты... А что это за кольцо? Где об этом почитать? А реализовать его на С++ или Delphi реально? Заранее, благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plombir 0 2 января, 2006 Опубликовано 2 января, 2006 · Жалоба 2 fantasy! Спасибо, огроменное! Нулевое кольцо - то что надо. Раньше о нем не слышал. "Капнул" в инете - нашел, то что надо. Придется, правда ядро NT с перехватом API изучать, но главное нашел! направление для моей проблемы. Теперь из третьего кольца будем в нулевое стучаться С Новым Годом! тебя. Еще раз, спасибо. ЗЫ. Больше недели общался в разных форумах и ничего, только здесь подсказали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fantasy 0 3 января, 2006 Опубликовано 3 января, 2006 · Жалоба :) Всегда пожалуста! Рад, что помог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 3 января, 2006 Опубликовано 3 января, 2006 · Жалоба 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 2 4 января, 2006 Опубликовано 4 января, 2006 · Жалоба est takaya programma - "giveio" Присоединяюсь. Там и API нет, пишешь один раз CreateFile, а потом используешь те же команды доступа к портам in и out, что и в W98. И не нужно пользоваться WinAPI, которые могут быть себе на уме. Прикладываю его сюда. Он маленький, инструкция там же. giveio.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plombir 0 4 января, 2006 Опубликовано 4 января, 2006 · Жалоба Вот я что по этой теме нашел. Компонент "DriverLINX Port IO Driver wrapper component" для delphi, c++ с исходниками. dlportio.zip Он немного великоват, но стоит того... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться