Gast
#2344403
Moin, mir ist aufgefallen, dass beim FIFO im Wiki ( http://www.mikrocontroller.net/articles/FIFO ) ein Eintrag verschenkt wird. Der Schreibzeiger zeigt auf den Eintrag, auf den als nächstes geschrieben wird. Der Eintrag, auf den der Schreibzeiger ist leer. Der Vergleich sieht so aus, dass der FIFO als voll gilt, wenn der Schreibzeiger +1 gleich dem Lesezeiger ist. Es könnte aber eben noch weiter geschrieben werden, bis der Schreibzeiger == Lesezeiger. Dies bringt natürlich wieder ein Problem, da der Vergleich Schreibzeiger == Lesezeiger genutzt wird, um zu erkennen, wann der FIFO leer ist. Bei einem FIFO über ein Char-Array ist dies zu verschmerzen, denn jede weitere Variable, welche zusätzlich genutzt werden müsste, um FIFO voll bzw. FIFO leer zu markieren, kostet auch wieder 1 Byte Speicher. Zusätzlich ist der FIFO sehr gut für Producer/Consumer Systeme geeignet. Jede Seite schreibt nur eine Variable, dadurch werden keine Mutexe benötigt. Nun benötige ich jedoch einen FIFO in dem ein ganzes Struct gespeichert werden kann. Gibt es eine Möglichkeit fest zu stellen, ob ein FIFO ganz voll bzw. leer ist (von mir aus mit zusätzlicher Variable) und dabei die Eigenschaft zu erhalten, dass der FIFO ohne Mutexe benutzt werden kann? Konkret benötige ich ihn, um CAN-Nachricht per ISR in den FIFO zu speichern und von der Hauptschleife aus zu verarbeiten. Grüße emp