Отговори на тема  [ 10 мнения ] 
C++ 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 28, 2005 10:49 am
Мнения: 86
Местоположение: Русе
Мнение C++
Здравейте.
Как мога да осъществя достъп до COM порта в С++. Ползвам Dev C++ 4.9.9.2. Понеже наскоро започнах да изучавам този език за програмиране и ще съм благодарен на всеки който ми окаже помощ :D.


Нед Фев 25, 2007 7:39 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Става с функцията - "CreateFile". Поразгледай за нея - не е сложно...
Ако не се оправиш - мога да ти дам малко код за C++Builder който ти ще си преправиш. Ако искаш обаче ча четеш данни от там, независимо от основната програма, тогава трябва да си създадеш отделен Thread за тая цел.


Нед Фев 25, 2007 8:53 pm
Профил WWW
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 11, 2006 8:19 pm
Мнения: 373
Местоположение: София/Edinburgh, UK
Мнение 
Първо зависи дали става въпрос за win95 или winXP, ако е за 95 има си функции port_output() и port_input() Изръчкай гоогле и ще им намериш подробни описания.Ако пък става въпрос за XP нещата вече стоят по - сложно. XP не позволява пряк достъп до портовете за това трябва през kernel.dll


Пон Фев 26, 2007 12:10 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 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
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 11, 2006 8:19 pm
Мнения: 373
Местоположение: София/Edinburgh, UK
Мнение 
Ами първото, което ми идва на акъл дали я имаш bios.h ???А следващото е дали пишеш на XP, защото ако е така то няма да те пунсе да бръкнеш на толкова ниско ниво !


Пон Фев 26, 2007 10:54 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 28, 2005 10:49 am
Мнения: 86
Местоположение: Русе
Мнение 
sv_shady написа:
Ами първото, което ми идва на акъл дали я имаш bios.h ???А следващото е дали пишеш на XP, защото ако е така то няма да те пунсе да бръкнеш на толкова ниско ниво !

Ами да имам го 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
Профил WWW
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Сря Мар 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
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни