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


von Chris H. (toffer)


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

von Klaus W. (mfgkw)


Lesenswert?

du bist sicher, daß die Daten nur einmal gesendet werden?

von Gast (Gast)


Lesenswert?

Sind sie eigentlich.

Gast

von Klaus W. (mfgkw)


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?

von Karl H. (kbuchegg)


Lesenswert?

Und ansonsten gilt die Regel:
Zeige deinen Code

von Chris H. (toffer)


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

von Gerry E. (micky01)


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!

von Klaus W. (mfgkw)


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ß.

von Chris H. (toffer)


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

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.