Programmcode um FiFo auszulesen

Gast #607541
Lesenswert?

Moin ! Für einen FiFo den ich auslesen möchte suche ich einen 
Programmcode bzw. eine Idee wie ich soetwas am besten realisieren kann.

Ich hab einen Puffer von 256 Bytes. Nun, irgendwie muss ich ja 
sinnvollerweise an die Daten kommen, die zum Beispiel in der Mitte des 
Fifo stehen bzw. ich brauche einen "Hilfezeiger" der mir sagt, dass 
diese Stelle schon gelesen worden ist.

Es wäre nett, wenn mir jemand eine Idee oder nen groben Plan geben 
könnte, wie ich das am besten programmieren kann!


Mfg Daniel
Gast #607544
Lesenswert?

Wo ist denn der FIFO?? ist das ein externes IC?
Ist der FIFO in Software realisiert?

Wie sollen wir dir hier helfen, wenn wir nix wissen worum es geht?

Glaubst du etwa, dass wir hier alle eine Glaskugel haben?
#607644
Lesenswert?

Daniel wrote:
> Moin ! Für einen FiFo den ich auslesen möchte suche ich einen
> Programmcode bzw. eine Idee wie ich soetwas am besten realisieren kann.
>
> Ich hab einen Puffer von 256 Bytes. Nun, irgendwie muss ich ja
> sinnvollerweise an die Daten kommen, die zum Beispiel in der Mitte des
> Fifo stehen

Nein. Musst Du nicht. Der Sinn einer FiFo ist es, dass ich genau
das nicht kann, bzw. mich nicht darum kümmern muss.
Auf der einen Seite werden die Daten reingesteckt, auf der anderen
Seite werden die Daten in der Reihenfolge ihres Eintreffens wieder
ausgelesen. Mittendrinn wird nicht zugegriffen.

> bzw. ich brauche einen "Hilfezeiger" der mir sagt, dass
> diese Stelle schon gelesen worden ist.

Was du meinst ist wahrscheinlich: ein Ringbuffer der eine
FiFo relaisiert.  "Ringbuffer" ist dein Stichwort bei google.
Gast #607906
Lesenswert?

Korrekt ich suchen einen Programmcode, wie ich einen 256kByte Ringpuffer 
verarbeiten kann bzw. wie ich die richtige Stelle für das lesen und 
schreiben bekomme!?

Meine Suche bei Google war leider n. sehr ertragreich!

Hat jemand was für mich!?
#607930
Lesenswert?

Daniel wrote:
>
> Meine Suche bei Google war leider n. sehr ertragreich!

Ehrlich?
Ringbuffer gibts wie Sand am Meer.

>
> Hat jemand was für mich!?

Ist doch eigentlich ziemlich trivial.
Und ja: Du brauchst eine Markierung wo das nächste
Element in den Ringbuffer einzufügen ist. Und ja,
du brauchst eine Markierung von wo das letzte mal
aus dem Ringbuffer gelesen wurde.
Der Rest ist: je nach Operation den richtigen Index
um 1 erhöhen und darauf achten, dass der Index auch
wirklich im Kreis rum geht.

Eine weitere Hilfsvariable die angibt wieviele Elemente
im Ringbuffer momentan enthalten sind, ist oft ganz
nützlich um einen möglichen Sonderfall zu knacken
und unterscheiden zu können ob der Ringbuffer jetzt
voll oder ob er leer ist. Hängt aber von der konkreten
Implementierung der Lese/Schreibmarken ab, ob das notwendig
ist.


-> Nimm dir einen Zettel, mal dir einen Ringbuffer mit
8 Elementen auf und geh einfach mal mit Papier und Bleistift
die Einfüge und Ausleseoperation durch, so wie du sie dir
vorstellst. Dann achtest du auf Fehler und verfeinerst dein
mentales Modell. Und dann ... wenn du genau weist was in
welcher Reihenfolge zu geschehen hast und welche Variablen
du benötigst ... dann setzt dich zu deinem Computer und schreib
das entsprechende Programm dazu.
Diesen Vorgang nennt man allgemein: Software Entwicklung.
#608009
Lesenswert?

1
unsigned char index_in, index_out;
2

3
unsigned char fifo[256];
4

5

6
int put_fifo( unsigned char in)
7
{
8
  if( ((index_in + 1) & 0xFF) == index_out )
9
    return -1;                                  // FIFO full
10

11
  fifo[index_in++ & 0xFF] = in;
12
  return 0;
13
}
14

15

16
int get_fifo( void )
17
{
18
  if( index_in == index_out )
19
    return -1;                                  // FIFO empty
20

21
  return fifo[index_out++ & 0xFF];
22
}


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren