Forum: PC-Programmierung C & Linux, serielle Zeichen auf Schnittstelle schreiben


von Andreas F. (bazo)


Angehängte Dateien:

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?

von na klar (Gast)


Lesenswert?

Nimm erst auf beiden Seiten z. B. minicom (oder stty + cat) damit Du 
weisst dass es beiderseits geht. Dann probiere deinen einen Kram auf 
einer Seite.

von Daniel (Gast)


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.

von mar IO (Gast)


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.

von bazo (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.