Forum: PC-Programmierung Linux, g++/gcc : Senden und Empfangen über serielle, aber schnell --- Blocking problem (=langsam)


von Daniel (Gast)


Lesenswert?

Hallo,
ich versuche gerade ein C++/C Programm zu schreiben,
dass mit einem AVR ATMEGA64 über die serielle kommuniziert.

Ab und an, wenn ein Taster am AVR gedrückt wird, sendet der AVR
ein paar Bytes zum PC.
In der restlichen Zeit nutzt der Computer den AVR als
RS232/Rs485 Konverter, sprich er sendet dem AVR Daten, die dieser
kurz analysiert (ganz primitives failsafe) und auf den RS485 BUS legt.

So,
wenn ich nun im Hauptthread fröhlich meine Daten sende geht alles.
Geschwindigkeit ist ok.

Lasse ich mein PC programm aber in einem extra Thread auch ab und zu
auf die serielle Schnittstelle lauschen, dann geht meine 
Sendeperformance in
die Knie.

Kann man das irgendwie verhindern?

 Viele Grüße
 Daniel

von zwieblum (Gast)


Lesenswert?

ohne den sourcecode zu kennen gar nicht.

von Daniel (Gast)


Lesenswert?

ich arbeite nur mit den linux funktionen open, write und read (siehe 
manpages).
Ich öffne das mit:
fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY);

Sprich im main() ne endlosschleife und dann je nach events nen write(fd, 
buffer, length).


Und im parallel laufenden Thread halt auch ne endlosschleife mit nem 
read(fd, buffer, length).

 gruß
 Daniel

von Ahem (Gast)


Lesenswert?

Ja. Und wie sieht nun der Sourcecode aus?

von zwieblum (Gast)


Lesenswert?

so rein auf verdacht, ohne den sourcode zu kennen (wink mit dem 
zunpfahl): du hast einen gepufferten i/o. du must mit termios den puffer 
abstellen - ha, verrate ich dir aber nicht wie die funktion heißt, ich 
zeg ja meinen sourcecode nicht her :-)

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.