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

Gast #1274860
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
Gast #1275228
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
Gast #1275829
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 :-)

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