C & Linux, serielle Zeichen auf Schnittstelle schreiben

#3145138
Lesenswert?

Hallo,

ich versuche gerade auf eine serielle Schnittstelle einen String zu 
schreiben. Das ganze ist ein Test um mich mit der Programmierung der 
seriellen Schnittstelle auseinander zusetzen.

Die Schnittstelle lese ich über ein zweite serielle Schnittstelle in dem 
gleichen PC zurück (Nullmodemkabel), zum Zurücklesen der Zeichen benutze 
ich http://www.brokestream.com/tinyserial.html auf /dev/ttyS4.

Leider kommt auf der Gegenseite nur irgendwelcher Zeichensalat an. Das 
sieht so aus, als würde die Baudrate von 19200Baud nicht stimmen, nur 
finde ich den Fehler nicht.

Bisherige Tests
Ich habe die notwendigen Rechte auf allen seriellen Schnittstelle des 
Systems.

Ich habe auf probeweise  com /dev/ttyS0 19200 gestartet, dann kommen die 
Zeichen unverstümmelt an, das Testprogramm war natürlich nicht aktiv.

Hänge ich ein ATMEL mit einer kleinen Routine zum Senden von Strings an 
/dev/ttyS4, kommen die Zeichenkette ebenfalls dort unverstümmelt an. Die 
Baudrate auf /dev/ttyS4 stimmt also.

Irgendein Hinweis, wo mein Denkfehler liegt?
Angehängte Dateien:
Gast #3145351
Lesenswert?

Nimm mal TCSADRAIN oder TCSAFLUSH wenn du die Schnittstellenparameter 
wieder auf die alten Werte setzt.

Ansonsten würde ich empfehlen nie alle Bits der c_*flags Elemente auf
einen Schlag zu setzen. Immer mit tcgetattr den alten Wert holen und 
dann mit &~ und | die gewünschten Bits löschen oder setzen. Zum Setzen 
der Baudrate sollte man sowieso cfsetispeed/cfsetospeed oder die BSD 
Erweiterung cfsetspeed benutzen. cfmakeraw ist auch ganz nett.
Gast #3146486
Lesenswert?

Eigentlich habe ich mal gedacht, ich habs drauf mit "Serielle 
Schnittstelle + Unix-Systeme", aber als ich das letzte Mal in der 
Richtung programmiert habe, wollte es um's verrecken nicht 
funktionieren. Mein Spicker http://www.tldp.org/HOWTO/Serial-HOWTO.html 
hat mir auch nicht weiter geholfen.

Letzt endlich habe dann doch bei 
http://www.netzmafia.de/skripten/hardware/Seriell/index.html 
nachgeschaut und ein Beispielcode mir passend umgebaut.
Gast #3147810
Lesenswert?

> Letzt endlich habe dann doch bei
> http://www.netzmafia.de/skripten/hardware/Seriell/index.html
> nachgeschaut und ein Beispielcode mir passend umgebaut.

Hallo,

die Lösung des Problems ist aus dem netzmafia Beispiel:

bzero(&new_termios, sizeof(new_termios));!

Offensichtlich wird die Struktur new_termios nicht initalisiert und dann 
steht da halt irgendetwas drin.

Danke für den Link

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren