Добрый день!
Подскажите, как можно управлять COM портом в C++?
При использовании conio и функции outb он пишет Privleged instrunction! и не работает!
Добрый день!
Подскажите, как можно управлять COM портом в C++?
При использовании conio и функции outb он пишет Privleged instrunction! и не работает!
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
20 сентября 2008 в 20:04
Всё понял, Спасибо!
18 сентября 2008 в 0:01
Через WinAPI – когда ты из пользовательского режима обращаешься.
А zubr kabbi пытается воспользоваться командами, доступными только в режиме ядра. Если он не хожет особо заморациваться, то ему через WinAPI, а про команды, которые он писал, пусть забудет
17 сентября 2008 в 21:04
Все таки без WinAPI тут не обойтись
17 сентября 2008 в 19:03
что бы использовать команды conio и тому подобные которые напрямую к памяти или оборудованию обращаются, тебе надо в режим ядра перейти, иначе винда ругаться будет.
16 сентября 2008 в 15:05
Работа с СОМ портом, вообще дело веселое, лично я делал при помощи WinAPI, только несколькими функциями там не обойдешся. вот например открытия и настройка порта:
#include <windows.h>
#include <iostream>
HANDLE COMPort;
int main()
{
DCB dcb;
COMMTIMEOUTS timing;
COMPort = CreateFile("COM2", GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(COMPort != INVALID_HANDLE_VALUE)
printf("COM port is open.\n");
else
printf("Couldn't open COM port .\n");
dcb.DCBlength = sizeof(DCB);
if(GetCommState(COMPort, &dcb))
printf("Structure DCB is read.\n");
else
printf("Couldn't read structure DCB.\n");
dcb.BaudRate = speed;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
if(SetCommState(COMPort, &dcb))
printf("Loading structure DCB is compleate.\n");
else
printf("Couldn't load structure DCB.\n");
timing.ReadIntervalTimeout = 0;
timing.ReadTotalTimeoutMultiplier = 0;
timing.ReadTotalTimeoutConstant = 0;
timing.WriteTotalTimeoutMultiplier = 0;
timing.WriteTotalTimeoutConstant = 0;
if(SetCommTimeouts(COMPort, &timing))
printf("Structure COMMTIMEOUTS is writen.\n");
else
printf("Couldn't write structure COMMTIMEOUTS.\n");
SetupComm(COMPort,2000,2000);
PurgeComm(COMPort, PURGE_RXCLEAR);
return 0;
}
16 сентября 2008 в 14:03
Только имена файлов "\\\\.\\COM1" и "\\\\.\\COM2"
15 сентября 2008 в 23:03
Под Вендой лучше файловые функции Win32 API использовать: CreateFile, ReadFile, и т.д.
15 сентября 2008 в 22:01
Если под Виндой, то можно обращаться как к файлу (через fopen и иже с ним) – задёшь в качестве имени файла "com1" или "com2"