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
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?
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.
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!?
..suchen einen Programmcode..i Google war leider n. sehr ertragreich Natürlich nicht. In der Zeit wo du googlest, hättest du auch selbstgeschrieben..
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.
OK - jetzt hole mir nen Zettel und nen Stift und werde mal meine Software selber entwickeln.. Sonst lernt man das "programmieren wohl nie" ???
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.