FIFO Speicher ?????

A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Leute

In manchen Themen wird hier von einem Fifo - Speicher gesprochen

Könnt ihr mir sagen was das ist ?
Wie er funktioniert ?
Und wozu man ihn benutzt ?

Danke
MFG Jack
 

zotos

Well-known member
Beiträge
4.462
Punkte Reaktionen
1.152
FIFO: first in first out.

Ist selbsterklärend was als erstes gespeichert wird, wird als erstes gelesen oder entnommen.

Gibt es nicht nur in der Software ist auch eine Art der Lagerverwaltung.
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Du kannst Dir den Speicher wie eine Uhr vorstellen. Jede Minute ist eine Speicherstelle in die ich einen Wert lege und
dann weiter zur nächsten Minute (Speicherstelle)springe. Nach 60 Minuten wird
der zuerst gespeicherte Wert wieder überschrieben usw.
Es gibt noch einen zweiten Minutenzeiger. Dieser liest dann auf anforderung die Speicherstellen aus.
Dabei ist zu beachten, das der Lesezeiger nicht den Schreibzeiger und umgekehrt überholen kann.

Die Fehlermeldungen im OP sind zum Beispiel so aufgebaut.

Gruß pt
 

Markus

Administrator
Teammitglied
Beiträge
5.226
Punkte Reaktionen
1.269
naja plc-tippser - nix für ungut, aber ich finde das beispiel mit dem bücherstapel einfacher...


fifo:
du stapelst bücher aufeinander, und ziehst bei bedarf das unterste raus.
du nimmst die bücher in der selben reihenfolge weg in der du sie auf den stapel gelegt hast. die (maximale) höhe des stapels entspricht der größe des speichers (puffers).


lifo:
gleich wie fifo, nur das du immer das oberste buch wegnimmst. eben das welches als letztes auf den stapel gelegt wurde.
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Zuviel Werbung?
->Hier kostenlos registrieren
@Markus
viele Wege führen nach Rom.

Ein Fifo ist erstmal als Ringspeicher zu verstehen. Deshalb die Uhr. Es gibt einen Lese- und einen Schreibzeiger.

Ein Lifo würde ich mit einem Bücherstapel beschreiben.
Das letzte Buch was aufgelegt wurde wird als erstes wieder abgenommen.

Wie man sich das bildlich nun vorstellt ist Gewohnheit.

Gruß pt
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
plc_tippser schrieb:
Ein Fifo ist erstmal als Ringspeicher zu verstehen. Deshalb die Uhr. Es gibt einen Lese- und einen Schreibzeiger.
Wie du sagst, führen viele Wege nach Rom: du kannst einen FIFO als Ringspeicher ausbilden. Du mußt es aber nicht. Du kannst auch das vorletzte in das letzte Datenelement kopieren und so zurück bis zum ersten ins zweite. Insbesondere für kurze FIFOs kann sowas sinnvoll sein, da alles mit festen Adressen arbeitet.

plc_tippser schrieb:
Ein Lifo würde ich mit einem Bücherstapel beschreiben.
Das letzte Buch was aufgelegt wurde wird als erstes wieder abgenommen.
Schon richtig, aber er wollte ja ein Buch rausziehen. Da dabei alle Inhalte (Bücher) einen Platz weiterwandern, entspricht es eben dem Kopieren von Speicherstelle zu Speicherstelle.
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Stimmt ja,
mit der Uhr das sollte ja auch nur bildlich sein :cry: .
Ob der jetzt mit dynamischen Schreib/Lesezeigern ausgestattet ist oder Speicherbereiche kopiert werden, ist ja letztlich egal. Ich habe halt einen vor X Jahren geschrieben und passe den nur in der Größe und im Datentyp an.
Hat auch den Vorteil das der Lesezeiger rückwärtslesen kann.

pt
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Zuviel Werbung?
->Hier kostenlos registrieren
Das mit den Zeigern hat vor allem den Vorteil, daß die Anzahl der möglichen Leseoperationen nur durch den Inhalt und die Anzahl der Schreiboperationen nur durch den verbleibenden Speicher begrenzt sind.
Beim Kopieren muss einer Schreib- genau eine Leseoperation folgen.
Habe das manchmal benutzt, um Eingaben von Analogeingängen zu "glätten", mit 3 bis 5 Worte langen FIFOS.
 

drfunfrock

Well-known member
Beiträge
934
Punkte Reaktionen
72
Jack schrieb:
Hallo Leute

In manchen Themen wird hier von einem Fifo - Speicher gesprochen

Hier ein Bsp (Hoffentlich ist das nicht zu O.T.):

VAR
fifo : ARRAY[0..TOP] OF UINT;
first : UINT;
last : UINT;
END_VAR

Ein Element hinzufügen:
first := (first + 1) MOD TOP;
fifo[first] := 2;

Ein Element entnehmen:
result := fifo[last];
last := (last + 1) MOD TOP;

Der MOD-Operator ist notwendig, damit kein Überlauf über die Arraygrenzen erfolgt.

Anzahl der Elemente in der FIFO:

IF last>first THEN
anzahl := TOP+first-last;
ELSE
anzahl := first-last;
END_IF;

Ich nehme solche FIFOs gerne für die Kommunikation über RS232 oder RS485. Ein wildes Schreiben kann es nicht geben und einen Überlauf (first überholt last) kann man leicht detektieren.
 
Oben