>ich kapiere das immer noch nicht so ganz.
Ja. Das kann verwirrend sein.
>Mit jedem weiteren Zeichen, werden dann die vorher empfangenen weiter nach >vorne
geschoben
Das wäre die wörtliche Umsetzung des Konzeptes. Aber... da das bedeuten
würde die Daten wirklich jedesmal umzukopieren macht man das anders.
Nimm mal an, das folgende sei eine Abbildung des Speichers und der soll
Teil unseres FIFOs sein.
buffer[0]
buffer[1]
buffer[2]
buffer[3]
buffer[4]
buffer[5]
buffer[6]
buffer[7]
buffer[8]
buffer[9]
Dann nimmt man sich zwei Indizes (, zwei Adressen, wenn Du so willst)
und lässt sie in diesen Bereich zeigen.
Am Anfang, wenn noch nichts drin ist, zeigen beide auf die selbe
Position. (Das kann eigentlich jede beliebige sein).
buffer[0] <= LesePosition = Schreibposition = 0
buffer[1]
buffer[2]
buffer[3]
buffer[4]
buffer[5]
buffer[6]
buffer[7]
buffer[8]
buffer[9]
Wenn nun ein Zeichen von der Schnittstelle gelesen wird, dann wird
dieses an die aktuelle Schreibposition gespeichert und die
Schreibposition um eins erhöht.
buffer[0] = getc <= LesePosition = 0
buffer[1] <= Schreibposition = 1
buffer[2]
buffer[3]
buffer[4]
buffer[5]
buffer[6]
buffer[7]
buffer[8]
buffer[9]
Kommt nun noch ein Zeichen passiert wieder das gleiche.
buffer[0] = 'x' <= LesePosition = 0
buffer[1] = getc
buffer[2] <= Schreibposition = 2
buffer[3]
buffer[4]
buffer[5]
buffer[6]
buffer[7]
buffer[8]
buffer[9]
OK?
Lesen tut man immer das zuerst reingeschrieben Zeichen, also das älteste
Zeichen. Man liest an der Leseposition. (Nomen est omen) und erhöht den
Lesezeiger, damit man beim nächstenmal eben das nächste Zeichen liest.
buffer[0] = 'x'
buffer[1] = <= LesePosition = 1
buffer[2] <= Schreibposition = 2
buffer[3]
buffer[4]
buffer[5]
buffer[6]
buffer[7]
buffer[8]
buffer[9]
Zeigen nun die Lese und die Schreibposition auf das selbe Element dann
ist nichts im Fifo drin.
Das ist noch nicht ganz alles, weil man bei der Position 9 wieder zu 0
muss und weil man prüfen muss ob die Schreibposition nicht die
Leseposition erreicht, aber im groben sollte es klar sein.
Oder?