|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:15 pm
|
Страница 1 от 1
|
[ 10 мнения ] |
|
| Автор |
Съобщение |
|
leotron
Ранг: Минаващ
Регистриран на: Пон Ное 28, 2005 10:49 am Мнения: 86 Местоположение: Русе
|
 C++
Здравейте.
Как мога да осъществя достъп до COM порта в С++. Ползвам Dev C++ 4.9.9.2. Понеже наскоро започнах да изучавам този език за програмиране и ще съм благодарен на всеки който ми окаже помощ  .
|
| Нед Фев 25, 2007 7:39 pm |
|
 |
|
juzisound
Ранг: Почетен член
Регистриран на: Съб Май 27, 2006 12:37 pm Мнения: 647 Местоположение: с. Згалево
|
Става с функцията - "CreateFile". Поразгледай за нея - не е сложно...
Ако не се оправиш - мога да ти дам малко код за C++Builder който ти ще си преправиш. Ако искаш обаче ча четеш данни от там, независимо от основната програма, тогава трябва да си създадеш отделен Thread за тая цел.
|
| Нед Фев 25, 2007 8:53 pm |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Първо зависи дали става въпрос за win95 или winXP, ако е за 95 има си функции port_output() и port_input() Изръчкай гоогле и ще им намериш подробни описания.Ако пък става въпрос за XP нещата вече стоят по - сложно. XP не позволява пряк достъп до портовете за това трябва през kernel.dll
|
| Пон Фев 26, 2007 12:10 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Не се сещам какво е това Dev 4.9.9.2
но за работа за маикрософтското C++ има доста добре направен и free клас за комуникация през серииния порт
http://www.naughter.com/serialport.html
Но и да не ползваш майкрософтското може и с малко усилия да си го направиш като за компилатора който ползваш.
Това е проста надстройка над WinApi функциите и лесно може да схванеш и как се работи директно с тях.
|
| Пон Фев 26, 2007 10:58 am |
|
 |
|
leotron
Ранг: Минаващ
Регистриран на: Пон Ное 28, 2005 10:49 am Мнения: 86 Местоположение: Русе
|
А някой да знае как се работи с bios.h цял ден се мъча и всеки път като напиша _bios_serialcom (3,0,0); ми изкарва че тази функция не е декларирана
ето и примерите които се мъча да подкарам http://www.digitalmars.com/rtl/bios.htm ... _serialcom
ползвам Borland C++ Version 5.01 
|
| Пон Фев 26, 2007 9:00 pm |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Ами първото, което ми идва на акъл дали я имаш bios.h ???А следващото е дали пишеш на XP, защото ако е така то няма да те пунсе да бръкнеш на толкова ниско ниво !
|
| Пон Фев 26, 2007 10:54 pm |
|
 |
|
leotron
Ранг: Минаващ
Регистриран на: Пон Ное 28, 2005 10:49 am Мнения: 86 Местоположение: Русе
|
Ами да имам го bios.h. Чудя се обаче защо на Pascal без проблем си става комуникацията с COM порта и то под XP, а на C++ ми прави мизерии.
|
| Вто Фев 27, 2007 4:51 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
_bios_serialcom функцията можеш да използваш, когато програмата ти е за DOS. В крайна сметка под XP каква програма подкарваш, DOS или Win ? COM порта за Win се програмира по различен начин за Win16 и Win32.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Фев 27, 2007 6:15 pm |
|
 |
|
paregov
Ранг: Ориентиран
Регистриран на: Сря Мар 01, 2006 2:21 pm Мнения: 267 Местоположение: Fort Lauderdale, FL
|
bios.h не се ли ползва, когато пишеш на С за COM порта?
Може да погледнеш този архив:
http://atmel.com/dyn/resources/prod_doc ... AVR231.zip
и вътре \Source Code\PC\update\comport.cpp
това се компилира на Dev C++.
_________________ Всички обичаме да печелим, но колко от нас обичат да тренират!
|
| Вто Фев 27, 2007 6:30 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
За Dev C++ не знам, но при Borland C/C++ bios.h е ориентиран за DOS.
В C++ сорса на Atmel не видях да се използват структури и/или функции от bios.h, използват се Win32 функциите CreateFile(), ReadFile(), WriteFile(), SetupComm(), SetCommState() и т.н. Тези функции не би трябвало да са дефинирани при Dev C++ в bios.h. Ето bios.h от Borland C/C++ 5.02:
 |  |  |  | Код: /* bios.h
Access to bios services.
*/
/* * C/C++ Run Time Library - Version 8.0 * * Copyright (c) 1987, 1997 by Borland International * All Rights Reserved. * */ /* $Revision: 8.1 $ */
#if !defined(__BIOS_H) #define __BIOS_H
#if !defined(___DEFS_H) #include <_defs.h> #endif
#if !defined(RC_INVOKED)
#if defined(__STDC__) #pragma warn -nak #endif
#endif /* !RC_INVOKED */
#ifdef __cplusplus extern "C" { #endif
#if !defined(_Windows)
/* diskinfo_t structure for _bios_disk() */
struct diskinfo_t { unsigned drive, head, track, sector, nsectors; void __far *buffer; };
/* cmd values for _bios_disk() */
#define _DISK_RESET 0 /* controller hard reset */ #define _DISK_STATUS 1 /* status of last operation */ #define _DISK_READ 2 /* read sectors */ #define _DISK_WRITE 3 /* write sectors */ #define _DISK_VERIFY 4 /* verify sectors */ #define _DISK_FORMAT 5 /* format track */
unsigned _RTLENTRY _bios_disk(unsigned __cmd, struct diskinfo_t _FAR *__dinfo); int _RTLENTRY biosdisk(int __cmd, int __drive, int __head, int __track, int __sector, int __nsects, void _FAR *__buffer); #endif /* !_Windows */
#if !defined(_Windows) || defined(__DPMI16__) || defined(__DPMI32__)
/* cmd values for _bios_keybrd() */
#define _KEYBRD_READ 0 /* read key */ #define _NKEYBRD_READ 0x10 /* read key - enhanced */ #define _KEYBRD_READY 1 /* check key ready */ #define _NKEYBRD_READY 0x11 /* check key ready - enhanced */ #define _KEYBRD_SHIFTSTATUS 2 /* get shift status */ #define _NKEYBRD_SHIFTSTATUS 0x12 /* get shift status - enhanced */
/* cmd values for _bios_printer() */
#define _PRINTER_WRITE 0 /* send a byte to printer */ #define _PRINTER_INIT 1 /* initialize printer */ #define _PRINTER_STATUS 2 /* read printer status */
/* cmd values for _bios_serialcom() */
#define _COM_INIT 0 /* set communication parms to a byte */ #define _COM_SEND 1 /* send a byte to port */ #define _COM_RECEIVE 2 /* read character from port */ #define _COM_STATUS 3 /* get status of port */
/* byte values for _COM_INIT cmd of _bios_serialcom() */
#define _COM_CHR7 0x02 /* 7 data bits */ #define _COM_CHR8 0x03 /* 8 data bits */ #define _COM_STOP1 0x00 /* 1 stop bit */ #define _COM_STOP2 0x04 /* 2 stop bits */ #define _COM_NOPARITY 0x00 /* no parity */ #define _COM_EVENPARITY 0x18 /* even parity */ #define _COM_ODDPARITY 0x08 /* odd parity */ #define _COM_110 0x00 /* 110 baud */ #define _COM_150 0x20 /* 150 baud */ #define _COM_300 0x40 /* 300 baud */ #define _COM_600 0x60 /* 600 baud */ #define _COM_1200 0x80 /* 1200 baud */ #define _COM_2400 0xa0 /* 2400 baud */ #define _COM_4800 0xc0 /* 4800 baud */ #define _COM_9600 0xe0 /* 9600 baud */
unsigned _RTLENTRY _bios_keybrd(unsigned __cmd); unsigned _RTLENTRY _bios_printer(unsigned __cmd, unsigned __port, unsigned __abyte); unsigned _RTLENTRY _bios_serialcom(unsigned __cmd, unsigned __port, unsigned __abyte);
int _RTLENTRY bioscom(int __cmd, char __abyte, int __port); int _RTLENTRY bioskey(int __cmd); int _RTLENTRY biosprint(int __cmd, int __abyte, int __port);
#endif /* !_Windows || __DPMI16__ || __DPMI32__ */
#if !defined(__WIN32__) || defined(__DPMI32__)
/* cmd values for _bios_timeofday() */
#define _TIME_GETCLOCK 0 /* get clock count */ #define _TIME_SETCLOCK 1 /* set clock count */
/* Constants for biostime() */ #define _BIOS_CLOCKS_PER_SEC 18.2 #define _BIOS_CLK_TCK _BIOS_CLOCKS_PER_SEC
/* register structure definitions for int86(), int86x() */
#ifndef _REG_DEFS #define _REG_DEFS
struct WORDREGS { unsigned int ax, bx, cx, dx, si, di, cflag, flags; };
struct BYTEREGS { unsigned char al, ah, bl, bh, cl, ch, dl, dh; };
union REGS { struct WORDREGS x; struct BYTEREGS h; };
struct SREGS { unsigned int es; unsigned int cs; unsigned int ss; unsigned int ds; };
struct REGPACK { unsigned r_ax, r_bx, r_cx, r_dx; unsigned r_bp, r_si, r_di, r_ds, r_es, r_flags; };
#endif /* _REG_DEFS */
unsigned _RTLENTRY _bios_equiplist(void); unsigned _RTLENTRY _bios_memsize(void); unsigned _RTLENTRY _bios_timeofday(unsigned __cmd, long _FAR *__timeval);
int _RTLENTRY biosequip(void); int _RTLENTRY biosmemory(void); long _RTLENTRY biostime(int __cmd, long __newtime);
int _RTLENTRY int86(int __intno, union REGS _FAR *__inregs, union REGS _FAR *__outregs ); int _RTLENTRY int86x(int __intno, union REGS _FAR *__inregs, union REGS _FAR *__outregs, struct SREGS _FAR *__segregs );
#endif /* !__WIN32__ || __DPMI32__ */
#ifdef __cplusplus } #endif
#if !defined(RC_INVOKED)
#if defined(__STDC__) #pragma warn .nak #endif
#endif /* !RC_INVOKED */
#endif /* __BIOS_H */
|  |  |  |  |
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Фев 27, 2007 8:25 pm |
|
|
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|