int fifo_get_nowait (fifo_t *b)
Liefert das nächste Byte aus der FIFO als int bzw. -1, falls die FIFO leer ist.
Was machst du, wenn FF gespeichert ist ? oder muß das nur für Text gehen ? --PicNick 18:16, 4. Mär 2006 (CET)
Wenn FF gespeichert ist, wird FF zurück geliefert. Die FIFOs speichern ihre Werte als unsigned. Der return-Wert ist int, mithin ist also 255 != -1. Will man ein char lesen, dann so:
char zeichen; int value; if (value = fifo_get_nowait (&fifo), value >= 0) zeichen = (char) value;
bzw. man schreibt value direkt nach UDR oder wohin auch immer. --SprinterSB 19:04, 4. Mär 2006 (CET)
d.h. du verwendest die Bits >8 implizit als Schalter ? naja. --PicNick 08:59, 5. Mär 2006 (CET)
In der FIFO stehen ja nur Werte >= 0. Und der Rückgabewert ist auch immer >= 0, wenn was drinne ist, ansonsten eben <0. Ich erweitere also den Wertebereich. Ausserdem kann auf <0 sehr effizient getestet werden. Wie würdest du es machen? --SprinterSB 09:59, 5. Mär 2006 (CET)
Mach nur, die Geschmäcker sind halt verschieden, absolute Wahrheiten gibt's nicht. Ich trenne immer Frage und Abholen, wobei die Frage immer non-destruktiv nach der verfügbaren Länge ist.
while (fifo_data() >= required_length ) // anzahl im Buffer { Uns_16 = fifo_read_short() // oder ähnlich }
Beispiel: Bei IP etc. hab immer 16 Bit als Länge vorn, da lese ich z.B. erst, wenn die auch da sind. Und dann erst weiter, wenn der record komplett ist. Aber für eine Controller-UART etc. ist das vielleicht auch etwas über-drüber. --PicNick 12:05, 5. Mär 2006 (CET)