help-програмирование lpt порта

Команда

Не получается считывать данные с регистра состояния LPT порта
Может XP мешает? Что делать? Обращаюсь к нему на СИ++ …

nicetry
Команда:

Не получается считывать данные с регистра состояния LPT порта
Может XP мешает? Что делать? Обращаюсь к нему на СИ++ …

мешает. в любой нормальной ОС лезть к портам напрямую из юзер-спейса нельзя. используй стандартнрые девайсы или пиши свой драйвер.

Команда

мешает. в любой нормальной ОС лезть к портам напрямую из юзер-спейса нельзя. используй стандартнрые девайсы или пиши свой драйвер.

и как мне быть?

Penguin
Команда:

и как мне быть?

Пробуй из под 98-й. Она пропускает

nicetry
Penguin:

Пробуй из под 98-й. Она пропускает

это не совсем верно… точнее совсем не верно 😉 как 98, так и NT позволяет обращаться из юзер-спейса к портам из нижнего адресного пространства (до 0x3FF вроде бы)… НО!!! только ДОС-приложениям в рамках эмуляции ДОС.
к тому же, если ты пишешь тиражируемое приложение - похорони идею писать его под 98 винды.

PS: еще можно посоветовать обращаться за советами в соответсвующий форум, а то тут тебе насоветуют 😉

toxa
nicetry

PS: еще можно посоветовать обращаться за советами в соответсвующий форум, а то тут тебе насоветуют 😉

Ну почему же? Рассказываю.

  1. Простое решение: Под NT/2000/XP взять и разрешить прямой доступ (нужны только права администратора). Вся необходимая информация и драйвер тут: www.beyondlogic.org/porttalk/porttalk.htm

  2. Если нужно еще проще, чем п. 1, тогда поможет вот это: www.logix4u.net/inpout32.htm Одна DLL, без _отдельного_ драйвера.

  3. Написать (а лучше взять готовый, или собрать из примера в DDK) свой драйвер устройства.

ps: Ресурсы по параллельному порту:

  1. Еще сайте BeyondLogic про параллельный порт: www.beyondlogic.org/index.html раздел “Parallel Port Interfacing”.
  2. Еще сайт про параллельный порт “Parallel Port Central”: www.lvr.com/parport.htm
nicetry

простите, нисколько не хотел задеть форум или форумчан, просто выразился неудачно, я хотел сказать, что существуют другие форумы, более заточенные под такие вопросы 😉
и всё-таки, при всё уважении хочется заметить: если есть желание обращаться к произвольным портам, то путь один - написать драйвер, всё остальное - костыли, которые зачастую ломаются после следующего же изменения в windows.
но на мой взгляд лезть к портам вообще не нужно, LPT - стандартный девайс и обращатся к нему нужно стандартными для системы методами.

toxa
nicetry

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

Скорее всего, ему нужно не байты пересылать, а управлять отдельными pin’ами порта, включая всякие там “strobe”, “line feed” и прочие. Так как, скорее всего, учитывая местную специфику, это связано с управлением чпу станком.

ps: Драйверы тоже от версии к версии переписывать иногда надо. Большое количество дров для NT не работает в XP и 2000. Смотря что и как написано. PortTalk - очень хорошее решение для уже написанных продуктов (при чем давно и зачастую под дос, как, например симулятор CSM).

nicetry

ну что тут сказать ? при любом подходе засад хватает, операционка такая 😉

Команда

Незнаю как но у меня всё срослось, экспериментально выяснол,
что чтобы считать регистр состояния LPT, надо сначала, пофиг че запихнуть в регистр данных.
Причем запись в регистр данных на моем компе производится только
2-16 кратным повторением одного и одного и тогоже байта.
На это я убил тоже около недели. Вообщем спасибо.

nicetry

т.е. станок будет резать правильно со 2го - 16го прохода ? - круто! 😁

toxa
Команда

Незнаю как но у меня всё срослось,

Ну мы-то тем более ничего не знаем о ваших изысканиях. Вы бы написали поподробнее, глядишь - и прояснилось бы. Как минимум надо знать:

  1. версия os, если стоит servicepack - какой?
  2. язык и версия компилятора: фирма, версия, servicepack
  3. режим lpt порта: ecp/epp/bi-directional
  4. адрес порта, irq
  5. кусок кода программы, где мы пытаемся читать и писать в порт, опрашивать или устанавливать статус

Код желательно с комментариями, относительно того, что вы _подразумевали_ этим куском кода сделать.

nicetry

есть еще вариант: пиши под линукс 😃
там есть замечательная функция ioperm, которая открывает руту доступ к нижнему пространству портов. проверено, мин нет - мой текущий проект так и работает, весь код работы с портом - 300 строк с выкрутасами.

PS: а такого, как описываеш - в принципе быть не может (во всяком случае не должно).