Benny Löfgren SYSOP
<2615>
· Text 2235 · w8 · kommentar
1985-12-02 12:25
Fråga: Hur skriver man ett FIFO?
Ja, för det första så ska väl nämnas att en bättre (tycker jag) benämning
på ringbuffert är FIFO, First In, First Out, till skillnad från LIFO,
Last In First Out - även kallat stack.
Hur man gör? Ja, man måste hålla rätt på fyra pekare:
- buffertens startadress i minnet
- buffertens slutadress i minnet
- aktuell 'skriv'position i bufferten
- aktuell 'läs'position
När man ska SKRIVA något i bufferten gör man så här:
1. Hämta skrivpekaren
2. Kolla mot läspekaren
2.1 Om (skrivpekaren=läspekaren-1) så är bufferten full.
Tänk på 'wrap-around'!
3. Skriv ner tecknet i bufferten
4. Öka skrivpekaren
4.1 Kolla om skrivpekaren passerat slutadressen
4.1.1 I så fall, sätt skrivpekaren = startadressen
För att LÄSA från bufferten gör man så här:
1. Hämta läspekaren
2. Kolla mot skrivpekaren
2.1 Om (läspekare=skrivpekare) så är bufferten tom.
Tänk även här på wrap-around!
3. Hämta upp tecknet från bufferten
4. Öka läspekaren
4.1 Kolla om läspekaren passerat slutadressen
4.1.1 I så fall, sätt läspekaren = startadressen
Det är rätt enkelt, det svåra är att hålla rätt på när man ska göra wrap-
around, dvs börja om från början i bufferten.