Цифровые сигнальные процессоры Вопросы, связанные с применением цифровых сигнальных процессоров: программирование, отладочные средства, алгоритмы... |
25.05.2010, 20:29
|
|
Частый гость
Регистрация: 14.12.2009
Сообщений: 16
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
LPT XP... осторожно, ассемблер!
Люди добрые, помогите пожалуйста с программой!
Есть простенькая программа, которая посылает 1 в порт, но поскольку ОС XP, ничего не работает Насколько я понял, нужно использовать либо драйвер, либо библиотеку dll, либо то и то или что-то совсем другое....
Смотрел тут http://www.pcports.ru/Articles.php и тут http://valery-us4leh.narod.ru/main.html (программу скачивал, порт работает там есть драйвер, с помощью которого сие чудо работает), но так и не смог разобраться Нужно на ассемблере, а везде пишут либо на делфи, либо С++, в общем нормального объяснения не нашел...
программа вот:
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H
BEGIN: JMP MAIN
MAIN PROC
mov dx, 378h
mov al, 1
out dx, al
MAIN ENDP
CODESG ENDS
END BEGIN
Помогите пожалуйста, чтобы это заработало
|
|
|
|
25.05.2010, 21:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,529
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
Сообщение от po4emu4ka
|
нормального объяснения не нашел
|
В винде обращение к порту происходит не напрямую, а через интерфейс драйвера. И если в 95/98 еще можно было это обойти, то начиная с W2K никак.
Потому и пишут на языках высокого уровня, что можно подключить драйвер (то бишь системную библиотеку) и работать через нее.
А ассемблерный код, приведенный Вами будет работать только под ДОС. И ЭТО не заработает под ХР. Принципиально.
Насколько я помню, это должно откомпилиться в СОМ-файл. А они практически не работали в расширенном режиме памяти, т.е. даже под 3.11 не должно работать. Только чистый ДОС.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
25.05.2010, 22:29
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 25.05.2010 в 22:32.
|
|
|
|
29.05.2010, 23:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
ну, ассемблерный код нужно подрихтовать ...а чтобы его сильно не менять в части обращения к порту, достаточно вызвать из своей программы драйвер giveo.sys ...вот он даст разрешения (через I/O Permission Map) обращаться вашему процессу к портам.
|
|
|
|
23.06.2010, 22:11
|
|
Прохожий
Регистрация: 23.06.2010
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
Нужно открыть LPT как файл
и работать через IOCONtrol
|
|
|
|
24.06.2010, 20:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
...и не иметь при этом возможности дергать пины.
|
|
|
|
24.06.2010, 21:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
А, если в байте, отправляемом в порт, дергать биты, разве пины не будут реагировать?
|
|
|
|
24.06.2010, 21:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
будут, но совсем не так как вы хотите, ибо системный драйвер делает это по своему ...раздельного контроля регистрами статуса, контроля и data не будет ...при открытии порта как файл, понятие этих регистров теряет смысл.
Последний раз редактировалось raxp; 24.06.2010 в 21:33.
|
|
|
|
24.06.2010, 21:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
А API,как для СОМ, для параллельного порта нет?
|
|
|
|
27.06.2010, 18:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
|
Re: LPT XP... осторожно, ассемблер!
API есть для всего в 3-м посте за это уже сказали ...управление через DeviceIoControl осуществляется через системный драйвер parclass.sys
Цитата:
|
Рассмотрим функции драйверов parclass.sys и parport.sys. Parport.sys предназначен для управления самим параллельным портом, т.е железом. Может показаться, что этот драйвер должен обеспечивать доступ через порты ввода/вывода к регистрам параллельного порта – данных, статуса и управляющему и предоставлять этот сервис вам. Как бы не так! В системе Windows NT все не так просто и прямолинейно. Этот драйвер выполняет совсем другие функции – он поддерживает PnP, регулирует доступ к портам, их захват и освобождение, контролирует режим работы каждого из присутствующих портов.
Parclass.sys – это базовый драйвер устройства, подключенного к параллельному порту. Почувствуйте разницу: parport.sys – драйвер самого порта, parclass.sys – драйвер устройства, подключенного к порту. Parclass.sys обеспечивает низкоуровневый доступ (row access) к устройству, подключенному к параллельному порту. Хотя при этом не стоит думать опять же, что этот драйвер позволит напрямую работать с регистрами параллельного порта. Когда вы из приложения вызывает функцию CreateFile("LPT1", … ) – вы работаете с объектом ядра – именованным устройством, созданным именно драйвером parclass.sys. Короче говоря, если вы собираетесь поуправлять неким устройством через параллельный порт из приложения, вы будете взаимодействовать именно с parclass.sys. Изучением интерфейса этого драйвера мы и займемся в дальнейшем. Если вас все же не оставляет мысль напрямую работать с регистрами параллельного порта – вам придется разработать собственный драйвер, другой дороги у вас нет. Но прежде чем заняться этим – подумайте! Я вас уверяю, что в 99% случаев такой необходимости нет.
http://junglewin.narod.ru/lpt.html
|
...если нужно просто послать данные через API, пожалуйста:
Цитата:
|
HANDLE hLpt =
CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
char buf[0x100];
sprintf(buf, "hello printer\ngood bye printer");
BOOL res =
WriteFile(hLpt, &buf, strlen(buf), &ret, NULL);
CloseHandle(hLpt);
|
но никакого управления дерганьем конкретных заданных пинов, как видите, нет ...лучше процитирую...
Цитата:
|
Windows рекомендует работать с LPT портом используя вызовы API функций - OpenFile(), WriteFile(), ReadFile(). Приложения, которые используют LPT порт для обмена информацией по парралельному интерфейсу с внешними устройствами (принтер, например) так и делает. У него нет задачи установить на каком-либо бите регистра Data лигическую еденицу. Ему (приложению) нужно просто отправить пакет данных, а кто там будет какие линиии при этом дергать и считывать его не сильно интересует. Эти операции проводит системный драйвер LPT порта. Он подгружается в память при загрузке ОС. Когда мы вызываем функцию OpenFile("LPT1", ....) мы посути дела обращаемся к драйверу порта, который имеет символическое имя LPT1. Драйвер делает кучу всякой работы - запрещает доступ к порту другим процессам, настраивает параметры протокола передачи данных, собственно реализует эту передачу, но в конечном итоге все это сводится к прямому управлению отдельными битами LPT порта на уровне ядра ОС.
...программа которая работает через API вызовы ни чего не заметит - вся низкоуровневая работа делается драйвером, а каким драйвером и куда пойдут пакеты данных - приложению наплевать!
|
использование драйверов типа inpout32, giveo - позволяет работать через ядро системы, минуя запрет на прямую работу с портом в nt/
p.s.: по теме топик-стартера - ответ дан, вызов giveo из его ассемблерной программы, зарегистрирует ее как приложение, имеющее такой доступ. Это самый простой способ, без изменений в коде ...а по работе с inpout32 вы можете почитать, либо в сети, либо в журнале «ПРОграммист» №3-4
Последний раз редактировалось raxp; 27.06.2010 в 18:29.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:56.
|
|