Ringbuffer zur Datenübertragung

Gast #2871526
Lesenswert?
• ▲
▼
Hi, ich hab ne Frage zu der Uart-Library von Fleury. Es gibt dort 
fertige Functions

uart_init, uart_getXXX, uart_putXXX

Dazu hab ich ne Frage.  Es steht dort bei den Beschreibungen, dass das 
zu uebertragende Zeichen in einen Ringbuffer geschrieben wird bzw. aus 
einem Ringbuffer gelesen wird. Heisst das jetzt, dass dass die 
Funktionen aus dieser Bibliothek alles "automatisch" erledigen, also 
dass ich - je nach Größe des Ringbuffers - einfach X-Zeichen in den 
Buffer schreibe und die Zeichen "automatisch" nach und nach übertragen 
werden, ohne dass ich mich jetzt um den Kram kümmern brauch bzw. beim 
Lesen ähnlich? Diese Bibliothek automatisiert mir ggf. also alles?
Gast #2871538
Lesenswert?
• ▲
▼
Hmm schrieb:
> Was genau hindert Dich nun eigentlich Dir den Quelltext anzusehen und
> Dir Deine Frage selbst zu beantworten?

Niemand, und ich hab es auch gemacht und die einzelnen Schritte auch im 
Debug-Modus Schritt für Schritt verfolgt, aber manchmal bin ich mir 
unsicher, ob ich es richtig verstanden habe, und wenn ich dann von Euch 
Profis hier eine Bestätigung bekomm, ob meine Annahme richtig war, fühl 
ich mich einfach sicherer und freu mich, dass ich was neues gelernt und 
vlt. kapiert hab.
Gast #2871543
Lesenswert?
• ▲
▼
>aber manchmal bin ich mir unsicher, ob ich es richtig verstanden habe

OK. Dann erkläre uns doch was Du genau untersucht hast um Deine Frage zu 
beantworten, was Du gefunden hast und inwiefern das Deine Frage 
beantworte und was die Antwort ist.
Dann können wir Dir (vermutlich) bestätigen, das wir zu dem selben 
Schluss gekommen sind oder auch nicht (und wenn, nein, warum nicht).

Aber so wie Du die Frage gestellt hast, liest sie sich als wenn Du 
selbst keinerlei Anstrengungen unternommen hast die Frage selbst zu 
beantworten.
OK. Du sagst, Du hast es doch getan. Dann dokumentiere das bitte.
#2871690
Lesenswert?
• ▲
▼
Hans Wurst schrieb:
> Heisst das jetzt, dass dass die
> Funktionen aus dieser Bibliothek alles "automatisch" erledigen, also
> dass ich - je nach Größe des Ringbuffers - einfach X-Zeichen in den
> Buffer schreibe und die Zeichen "automatisch" nach und nach übertragen
> werden, ohne dass ich mich jetzt um den Kram kümmern brauch bzw. beim
> Lesen ähnlich? Diese Bibliothek automatisiert mir ggf. also alles?

Um's genau zu wissen, brauchen wir entweder den Quelltext oder die 
Dokumentation...

Ein Ringpuffer ist halt ein einfacher Puffer, der "überlaufen" kann. 
Also z.B. wenn der Empfangspuffer 16 Byte groß ist und Du nicht schnell 
genug die Daten "abholst" könnte, dann würde der Ringpuffer überlaufen.
Was dann genau passiert steht (hoffentlich) in der Dokumentation. Es 
kann z.B. sein, dass dieser Zustand "ignoriert" wird. Dann bekommst Du 
Datensalat beim Lesen... oder es wird festgestellt und Du bekommst eine 
Meldung für den Pufferüberlauf und musst evtl. den Puffer 
"zurücksetzen". Weitere Varianten sind denkbar...
Der Puffer kann beim Lesen auch "unterlaufen", d.h. Du versuchst Daten 
zu lesen, aber es sind noch keine empfangen worden. Auch hier kann der 
Aufruf blockieren (Anwendung hängt, bis Daten empfangen worden sind - 
mit etwas Pech, wenn die Verbindung gestört ist bis in alle Ewigkeit). 
Oder die Funktion liefert einfach unsinnige Daten oder "-1" oder "0" 
zurück. Meist kann man abfragen, ob schon Daten im Puffer sind. Und das 
Problem so umgehen.

Auch beim Versand gibt es verschiedene Möglichkeiten: Wenn noch 16 
unversendete Bytes im Puffer wären und Du weiter hinein schreibst, 
könnte entweder das Problem ignoriert werden (dann überschreibst Du die 
noch ungesendeten Daten)... oder es wird ein Pufferüberlauf gemeldet und 
du darfst wieder die Verbindung "zurücksetzen"... oder aber der 
Schreibaufruf "blockiert".

Wenn der Aufruf blockiert (wartet bis Daten da sind oder in den Puffer 
geschrieben werden können), nennt man die Art der Verarbeitung 
"synchron" oder "blocking".

Wenn der Aufruf nicht blockiert ist die Verarbeitung "asynchron" oder 
"non blocking".


ALSO: Es gibt also verschiedene Varianten. Und wie die Bibliothek zu 
benutzen ist, sollte in der Doku stehen. Vielleicht gibt es auch 
Beipielprogramme... an denen sieht man am schnellsten, wie mit den 
obigen Problemen umzugehen ist.

Soo... Ich denke das sollte für's erste reichen. Damit solltest Du genug 
Wissen haben, um heraus zu finden, was die Bibliothek tut.

Grüße,
Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.