mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne den sourcecode zu kennen gar nicht.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Und wie sieht nun der Sourcecode aus?

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.