Страница 1 из 1

Работа с LPT под XP

Добавлено: 10 июл 2009, 15:58
ksu2ksu
Управление лабораторным анализатором поизводится c LPT1 по специальному кабелю со своими тригерами и регистрами программой на паскале с ассемблерными вставками. Под XP программа не видит изменения портов и висит в ожидании. Что можно сделать чтоб XP полностью освободил LPT1, т.к. он нужен только для работы с анализатором.

Re: Работа с LPT под XP

Добавлено: 11 июл 2009, 00:23
Romeo
Начиная с Windows NT/2000 работать с LPT портом напрямую нельзя, порт берёт под свой контроль операционная система, защищая его и позволяя обращаться к нему через свои API. Для того, чтобы твоя порграмма заработала под Windows, тебе нужно переписать её на Win32 API. Плясать нужно от функции CreateFile, которой в качестве первого параметра передаётся строка "LTP1", далее читать MSDN.

Как вариант, можно почитать вот эту статейку:
http://junglewin.narod.ru/lpt.html

Re: Работа с LPT под XP

Добавлено: 12 июл 2009, 08:04
demon416
Или просто вынести код работы с портом в dll :)

Re: Работа с LPT под XP

Добавлено: 12 июл 2009, 15:21
Romeo
Как это поможет?

Re: Работа с LPT под XP

Добавлено: 12 июл 2009, 15:39
demon416
Это одна из особенностей системы защиты windows
ассемблерный код работы с портами нельзя использовать в приложении, но можно использовать в dll. Два года назад, когда я разбирался с этой темой, в интернете было много информации, сейчас, почемуто, гуглиться только одна расклонированная статья в которой все описание ограничено "Если вы все-таки решили писать низкоуровневое чтение то эти процедуры нужно выносить в отдельную DLL или VXD", на этом принципе работает общеизвестная giveio32.dll.

Re: Работа с LPT под XP

Добавлено: 12 июл 2009, 23:21
Romeo
С ума сойти, первый раз об этом слышу. Век живи, чек учись :)

Re: Работа с LPT под XP

Добавлено: 13 июл 2009, 09:42
somewhere
Я правда работал с COM-портами, а не с LPT, путем чтения/записи напрямую используя ассемблер. Код в DLL не выносил, все прекрасно работало и в 3-ем кольце защиты. Странно почему же с LPT все по другому, может просто у автора статьи этот порт был занят принтером, и сам драйвер принтера защитил и вывел это адресное пространство из 3-го во 2-ое, к примеру, кольцо? Мне напоминает работу с хуками - но там все понятно, приложение завершается, освобождает память - но хук должен работать. А здесь что за ограничения такие....

Re: Работа с LPT под XP

Добавлено: 01 авг 2009, 09:57
WinMain
Вот вроде бы неплохая подборка статей по этой теме...

http://www.pcports.ru/Articles.php

Работа с LPT под XP

Добавлено: 10 сен 2009, 16:17
retaig
Возможно кто-то сталкивался с такой задачей...
Есть желание использовать LPT порт в качестве генератора имрульсов для управления шаговым двигателем.
Есть ли необходимость в перекомпилировании ядра Linux и написпнии софта используя RealTime функции или все можно сделать как-нибудь проще?

P.S. У меня есть пара вопросов уровня курсовика по ТУ по шаговым двигателям если кто может проконсультировать напишите в ЛС, а то на форуме нет подходящего раздела чтобы туда запостить.

Re: Работа с LPT под XP

Добавлено: 12 сен 2009, 17:55
WinMain
Честно говоря, плохая идея, чтобы компьютер сам генерировал последовательность управляющих импульсов для шагового электродвигателя. Для этого лучше собрать отдельный генератор импульсов, а с помощью компьютера управлять этим генератором. Тогда ты вообще не будешь зависеть от операционной системы компьютера.
К примеру для сборки генератора управляющих импульсов тебе потребуется задающий генератор тактовой частоты, логический делитель частоты, счётчик импульсов и дешифратор, с выходов которого и будут поступать импульсы на управление шаговым двигателем. А компьютер через LPT-порт будет тебе передавать на логический делитель число, соответствующее коэффициенту деления тактовой частоты задающего генератора. Предположим, что тактовая частота у генератора импульсов равна 1000 Гц, а компьютер передаёт через LPT-порт число 100. В итоге шаговый двигатель будет выполнять 10 шагов в секунду. Можно так же предусмотреть вариант полной остановки двигателя, например: подать с компьютера значение 0.