mikrocontroller.net

Forum: PC-Programmierung Lesen Serielle Schnittstelle: Clear after Read?


Autor: Chris H. (toffer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute,
bin gerade am basteln an der Kommunikation zwischen meinem MCU und dem 
PC. Funktioniert im Prinzip auch alles in meinem PC-Programm und am MCU.

Ich habe nur ein Problem, ich (arbeite unter Linux). :

Ich konfiguriere meine serielle Schnittstelle (bei mir ttyS0)
Hole mir dann den filediscriptor
und lese dann mit read mehrfach und bekomme erwartete Daten
dann schließe ich den filediscriptor wieder.
Bis hierer alles super!

Doch wenn ich jetzt das gleiche Prozedere wiederhole, dann bekomme ich 
noch einmal die gleichen Daten aus dem Buffer. D.h. nach dem Lesen von 
ttyS0 werden die gelesenen Daten nicht gelöscht.

Wie erreiche ich dies? Habe auch schon gegoogled, dachte gibt da ne 
Option/Flag oder so, aber habe ich nicht gefunden. Nur wie man den 
ganzen Buffer cleared, aber das will ich nicht, ich will einfach nur, 
das die Daten die ich lese, dann auch raus aus dem Buffer sind.

Jemand nen Tipp?


Vielen Dank.

Gruß toffer

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du bist sicher, daß die Daten nur einmal gesendet werden?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind sie eigentlich.

Gast

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich würde schwer wundern, wenn /dev/ttyS0 dieselben Daten zweimal
liefert, es sei denn du hast einen Zombiekernel mit untoten Puffern.
Rein gefühlsmäßig würde ich auf ein anderes Problem tippen, z.B.
daß der MC einen Reset macht und nach dem Neustart alles nochmal
liefert oder sowas.
Kann man das mal mit einem Terminalprogramm simulieren?
Oder die Ausgaben mit einem fortlaufenden Zähler garnieren, damit
man merkt, ob es eine neue Ausgabe ist oder noch die alte?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ansonsten gilt die Regel:
Zeige deinen Code

Autor: Chris H. (toffer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
danke für die Antworten. Mit Terminal ist alles getestet. Das 
funktioniert zu 100% seitens des MCU. Habe den Code auf nem anderen 
Rechner,werde den heute Abend reinstellen. Aber zur Info, wenn ich das 
Prozedere von Oben wiederhole mehrmals, dann kommen irgend wann auch die 
neuen Daten.

Aber zu meinem UART Code, ich verwende auf PC Seite zu 90% diesen Code:

http://www.teuniz.net/RS-232/


Vielen Dank für eure Hilfe

Gruß toffer

Autor: Gerry E. (micky01)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris H. schrieb:
> Hey,
> danke für die Antworten. Mit Terminal ist alles getestet. Das
> funktioniert zu 100% seitens des MCU. Habe den Code auf nem anderen
> Rechner,werde den heute Abend reinstellen. Aber zur Info, wenn ich das
> Prozedere von Oben wiederhole mehrmals, dann kommen irgend wann auch die
> neuen Daten.
>
> Aber zu meinem UART Code, ich verwende auf PC Seite zu 90% diesen Code:
>
> http://www.teuniz.net/RS-232/
>
>
> Vielen Dank für eure Hilfe
>
> Gruß toffer

Die restlichen 10% Code werden es dann schon richten!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
umgekehrt kann man doch mal statt des MC einen PC mit Hyperterm 
dranhängen, was passiert denn dann?

Ansonsten: 100% eines möglichst kleinen Programms mit diesem Fehler.
90% eines ähnlichen Programms machen irgendwie keinen Spaß.

Autor: Chris H. (toffer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute,
Problem gelöst.

Also nach euren Hinweisen bin ich alles noch einmal genau durchgegangen.

Ich dachte ja durch den Test mit Terminal, dass auf Seiten des MCU alles 
funktioniert, ich hatte zur Kommunikation CuteCom benutzt und dachte es 
hat einfach eine komische Bedienung wenn man dort die bereits getippten 
Befehle noch mal anklickt, aber der Fehler war nun auf Seiten des MCU, 
das ich das UDR Register 2x hintereinder auslese (mit dem Ziel das 
gleiche zu erhalten), wusste nicht, dass dies böse ist.

Vielen dank für alle die geschrieben haben

Gruß Toffer

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.