Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual C++
Перезагрузить страницу Работа с параллельным портом
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Poker Poker вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.05.2005
По умолчанию Работа с параллельным портом - 17.10.2005, 16:32

Собираюсь написать прогу.
Подскажите, с помощью каких функций API можно работать с битами параллельного порта в реальном времени? (установить-сбросить)
Ответить с цитированием
  (#2 (permalink)) Старый
Mr. Пронька Mr. Пронька вне форума
Member
 
Сообщений: 168
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.06.2005
По умолчанию 17.10.2005, 16:34

Используй ассемблерные вставки
Ответить с цитированием
  (#3 (permalink)) Старый
Poker Poker вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.05.2005
По умолчанию 17.10.2005, 16:38

Интересно, а как она будет под Windows XP и т.п. работать?
Ответ - не будет она работать так просто.
Ответить с цитированием
  (#4 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 17.10.2005, 16:49

Из usermode - никак. Из ядра или копать IOCTL
Ответить с цитированием
  (#5 (permalink)) Старый
Poker Poker вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.05.2005
По умолчанию 17.10.2005, 16:52

Я УВЕРЕН, что следует использовать
WriteFile()
Но вот работал ли кто-нить на практике с этим делом?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Jonano Jonano вне форума
Специалист
 
Аватар для Jonano
 
Сообщений: 3,541
Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 14 сообщениях
Регистрация: 19.04.2005
По умолчанию 17.10.2005, 17:16

По поводу WriteFile ты в принципе прав, с параллельным портом чаще всего с помощью неё работают. Попробуй сначала считать с порта данные (ReadFile), модифицировать нужные биты, а потом записать обратно (WriteFile).
Ответить с цитированием
  (#7 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию 17.10.2005, 17:56

Вообще realtime и винда вещи несовместимые. А ч-з WriteFile() у тебя будет такой realtime как я папа римский.
Ответить с цитированием
  (#8 (permalink)) Старый
Kislov Kislov вне форума
Member
 
Сообщений: 576
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2004
По умолчанию 18.10.2005, 09:26

попробуй посмотреть в сторону библиотеки DLPortIO от компании Scientific Software Tools. Она позволяет работать с Windows XP.
Ответить с цитированием
  (#9 (permalink)) Старый
_TNT_ _TNT_ вне форума
Member
 
Сообщений: 448
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.02.2005
По умолчанию 19.10.2005, 19:10

Код:
#include <windows.h>
#include <stdio.h>

DCB dcb;
COMMTIMEOUTS ct;
HANDLE port;
DWORD mask;
DWORD bc;
char buf[101];

void main (){
    dcb.DCBlength=sizeof(DCB);
    BuildCommDCB("baud=9600 parity=N data=8 stop=1",&dcb);
    dcb.fNull=TRUE;

    ct.ReadIntervalTimeout=100;
    ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=0;
    ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;

    port=CreateFile("COM2",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);

    SetCommState(port,&dcb);
    SetCommTimeouts(port,&ct);
    PurgeComm(port,PURGE_RXCLEAR);

    SetCommMask(port,EV_RXCHAR);
    WaitCommEvent(port,&mask,NULL);
    ReadFile(port,buf,100,&bc,NULL);
    printf("%s", buf);
    CloseHandle(port);
}
Ответить с цитированием
  (#10 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию 19.10.2005, 20:12

2 _TNT_
Вообще то приведенный тобой код для работы с последовательным портом.
Ответить с цитированием
  (#11 (permalink)) Старый
Гробовщик Гробовщик вне форума
Member
 
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.07.2005
По умолчанию 20.10.2005, 10:29

Вообще, это правда, что Винда и реальное время две разных вещи.
Код предложенный _TNT_ во - первых для работы с последовательным портом, во - вторых принцип больше подходит для 98 Винды, так как там чтение/запись происходят напрямую из буфера порта и через события. В виндах повыше драйвер сам заботится о правильности чтения и копит данные в собственном буфере.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Com-портом Денис2000 WinAPI 4 05.12.2010 20:26
Работа с портом в паскале Нарик Pascal 0 03.11.2010 23:12
Работа с последовательным портом myshansun Сетевое программирование 8 15.08.2009 00:26
Работа с USB портом в Builder 6 SafSerg C++ Builder 16 29.09.2008 15:30
Работа с COM-портом Dynamite Pascal 19 30.12.2007 12:02
Работа с LPT портом в режиме DMA CBR_R Assembler 7 12.10.2006 20:02
Работа с Com портом в среде Delphi Chelentano Железо. Написание драйверов 3 18.08.2006 17:04
Работа с Com-портом Chelentano Железо. Написание драйверов 5 01.03.2006 20:09
Работа с ком-портом matvey1981 С/С++ 1 20.09.2005 17:09
Работа с СОМ портом Supermario C++ Builder 8 07.07.2005 22:20
Работа с LPT портом написание кода asterix C++ Builder 1 15.03.2004 16:41
Работа с LPT-портом sag C++ Builder 1 05.08.2003 01:49



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов