Работа с LPT под XP
Модераторы: Duncon, Hawk, Romeo, Eugie
Управление лабораторным анализатором поизводится c LPT1 по специальному кабелю со своими тригерами и регистрами программой на паскале с ассемблерными вставками. Под XP программа не видит изменения портов и висит в ожидании. Что можно сделать чтоб XP полностью освободил LPT1, т.к. он нужен только для работы с анализатором.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Начиная с Windows NT/2000 работать с LPT портом напрямую нельзя, порт берёт под свой контроль операционная система, защищая его и позволяя обращаться к нему через свои API. Для того, чтобы твоя порграмма заработала под Windows, тебе нужно переписать её на Win32 API. Плясать нужно от функции CreateFile, которой в качестве первого параметра передаётся строка "LTP1", далее читать MSDN.
Как вариант, можно почитать вот эту статейку:
http://junglewin.narod.ru/lpt.html
Как вариант, можно почитать вот эту статейку:
http://junglewin.narod.ru/lpt.html
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Или просто вынести код работы с портом в dll 

ака хинт: коментируйте код, самим же легче будет разобраться 

- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Как это поможет?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Это одна из особенностей системы защиты windows
ассемблерный код работы с портами нельзя использовать в приложении, но можно использовать в dll. Два года назад, когда я разбирался с этой темой, в интернете было много информации, сейчас, почемуто, гуглиться только одна расклонированная статья в которой все описание ограничено "Если вы все-таки решили писать низкоуровневое чтение то эти процедуры нужно выносить в отдельную DLL или VXD", на этом принципе работает общеизвестная giveio32.dll.
ассемблерный код работы с портами нельзя использовать в приложении, но можно использовать в dll. Два года назад, когда я разбирался с этой темой, в интернете было много информации, сейчас, почемуто, гуглиться только одна расклонированная статья в которой все описание ограничено "Если вы все-таки решили писать низкоуровневое чтение то эти процедуры нужно выносить в отдельную DLL или VXD", на этом принципе работает общеизвестная giveio32.dll.
ака хинт: коментируйте код, самим же легче будет разобраться 

- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
С ума сойти, первый раз об этом слышу. Век живи, чек учись 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Я правда работал с COM-портами, а не с LPT, путем чтения/записи напрямую используя ассемблер. Код в DLL не выносил, все прекрасно работало и в 3-ем кольце защиты. Странно почему же с LPT все по другому, может просто у автора статьи этот порт был занят принтером, и сам драйвер принтера защитил и вывел это адресное пространство из 3-го во 2-ое, к примеру, кольцо? Мне напоминает работу с хуками - но там все понятно, приложение завершается, освобождает память - но хук должен работать. А здесь что за ограничения такие....
It's a long way to the top if you wanna rock'n'roll
Возможно кто-то сталкивался с такой задачей...
Есть желание использовать LPT порт в качестве генератора имрульсов для управления шаговым двигателем.
Есть ли необходимость в перекомпилировании ядра Linux и написпнии софта используя RealTime функции или все можно сделать как-нибудь проще?
P.S. У меня есть пара вопросов уровня курсовика по ТУ по шаговым двигателям если кто может проконсультировать напишите в ЛС, а то на форуме нет подходящего раздела чтобы туда запостить.
Есть желание использовать LPT порт в качестве генератора имрульсов для управления шаговым двигателем.
Есть ли необходимость в перекомпилировании ядра Linux и написпнии софта используя RealTime функции или все можно сделать как-нибудь проще?
P.S. У меня есть пара вопросов уровня курсовика по ТУ по шаговым двигателям если кто может проконсультировать напишите в ЛС, а то на форуме нет подходящего раздела чтобы туда запостить.
Честно говоря, плохая идея, чтобы компьютер сам генерировал последовательность управляющих импульсов для шагового электродвигателя. Для этого лучше собрать отдельный генератор импульсов, а с помощью компьютера управлять этим генератором. Тогда ты вообще не будешь зависеть от операционной системы компьютера.
К примеру для сборки генератора управляющих импульсов тебе потребуется задающий генератор тактовой частоты, логический делитель частоты, счётчик импульсов и дешифратор, с выходов которого и будут поступать импульсы на управление шаговым двигателем. А компьютер через LPT-порт будет тебе передавать на логический делитель число, соответствующее коэффициенту деления тактовой частоты задающего генератора. Предположим, что тактовая частота у генератора импульсов равна 1000 Гц, а компьютер передаёт через LPT-порт число 100. В итоге шаговый двигатель будет выполнять 10 шагов в секунду. Можно так же предусмотреть вариант полной остановки двигателя, например: подать с компьютера значение 0.
К примеру для сборки генератора управляющих импульсов тебе потребуется задающий генератор тактовой частоты, логический делитель частоты, счётчик импульсов и дешифратор, с выходов которого и будут поступать импульсы на управление шаговым двигателем. А компьютер через LPT-порт будет тебе передавать на логический делитель число, соответствующее коэффициенту деления тактовой частоты задающего генератора. Предположим, что тактовая частота у генератора импульсов равна 1000 Гц, а компьютер передаёт через LPT-порт число 100. В итоге шаговый двигатель будет выполнять 10 шагов в секунду. Можно так же предусмотреть вариант полной остановки двигателя, например: подать с компьютера значение 0.