COM-Port HOWTO[solved]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tiris
Beiträge: 86
Registriert: 01.09.2005 11:26:30

COM-Port HOWTO[solved]

Beitrag von tiris » 27.09.2005 11:56:03

Hi,
hat jemand für C/C++ ein Com-Port HOWTO das er empfehlen würde? Ich möchte mit dem Com-Port Geräte ansteuern.

Gruß tiris
Zuletzt geändert von tiris am 29.09.2005 16:56:32, insgesamt 1-mal geändert.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 27.09.2005 13:26:28

hi,

Warum irgendein Howto lesen, wenn es offizielle gibt? ;)

Serial-HOWTO
Serial-Programming-HOWTO
Text-Termial-HOWTO

Zum schnell mal nachschauen: man termios
Fuer ganz neugierige: /usr/src/kernel-source-2.6.x/Documentation/serial/driver
Ein paar Zeilen C, wie ich sie fuer Text-Terminals, CNC-Maschinen usw. benutze.
Dazu braucht man noch: [wie geht ein Edit in nopaste?! :?]
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <termios.h>
Beware of programmers who carry screwdrivers.

tiris
Beiträge: 86
Registriert: 01.09.2005 11:26:30

Beitrag von tiris » 28.09.2005 20:37:18

Danke für die schnelle Antwort.
ich lese mich da mal durch.

Gruß tiris

Benutzeravatar
jd
Beiträge: 286
Registriert: 01.07.2003 12:02:33
Wohnort: D->Hessen->MKK

Beitrag von jd » 29.09.2005 12:05:43

Das geht vielleicht auch einfacher:

http://ezv24.sourceforge.net/

Benutze aber die Version aus dem cvs. Das letzte tarball hat kleinen Fehler im Makefile (für die Demo).

tiris
Beiträge: 86
Registriert: 01.09.2005 11:26:30

Beitrag von tiris » 29.09.2005 14:10:21

Hi
ich hätte da jetzt noch eine kleine Frage: Ich habe mal ein Programm(chen) geschrieben, dass nur den Port aufmachen soll, damit ich weiß ob es geht. Aber beim compilieren bekomme ich
motor.c:17:22: ungültiger Suffix »_RDWR« an Ganzzahlkonstante
motor.c:17:31: ungültiger Suffix »_NOCTTY« an Ganzzahlkonstante

Hier ist der Code:

http://nopaste.debianforum.de/1226

Danke
Gruß tiris

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 29.09.2005 16:43:24

hi,

Da gehoert jeweils ein O wie Open vor den Unterstrich, keine 0 wie Null.

Ja wenn alles so einfach waer' :)
Beware of programmers who carry screwdrivers.

tiris
Beiträge: 86
Registriert: 01.09.2005 11:26:30

Beitrag von tiris » 29.09.2005 16:45:31

Mercy, war aber blöde zu lesen, irgendwie sollten die Zeichensätze eindeutiger sein.

Jedenfalls danke.

Gruß tiris

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 29.09.2005 16:48:19

mmmh, frueher hatte die Null eine Punkt in der Mitte oder einen Querstrich...
aber frueher war alles viel besser :)
Beware of programmers who carry screwdrivers.

Benutzeravatar
jd
Beiträge: 286
Registriert: 01.07.2003 12:02:33
Wohnort: D->Hessen->MKK

Beitrag von jd » 30.09.2005 17:18:41

Da fehlt aber noch eine Menge. Es gibt noch Unterschiede wie blocking/non-blocking, Timeouts, ...

Mit ezV24 könnte das so aussehen (Code einfach so frei von der Leber weg):

Code: Alles auswählen

// ACHTUNG: kompiliert so nicht...
#include <stdio.h>
#include <stdlib.h>
#include <ezV24/ezV24.h>

#define MAXBUFFER 100
v24_port_t *UsedPort=NULL;
char buffer[MAXBUFFER+1];
int count;

UsedPort=v24OpenPort("/dev/ttyS0",V24_STANDARD);
v24SetParameters(UsedPort,V24_B9600,V24_8BIT,V24_NONE);
v24SetDTR(UsedPort,1);
v24Puts((UsedPort,"Hallo hier bin ich\n");
count=v24Gets(UsedPort,buffer,MAXBUFFER);
if ( count > 0 )
	printf("das kam zurück: '%s'\n",buffer);
v24SetDTR(UsedPort,0);
v24ClosePort(UsedPort);
Das Setzen von DTR ist auch nur ein Beispiel. Wenn Du den Devicenamen portabler brauchstm kannst Du auch das machen:

Code: Alles auswählen

char portname[V24_SZ_PORTNAME+1];
v24PortName(1,portname);
Das liefert dann für Windows "COM1" und für Linux "/dev/ttyS0" als ersten Port.

Antworten