template<class T>
class Fifo< T >
Fifo čili fronta.
Fifo použité v obsluze USB zkusíme napsat jako šablonu. Fakt je, že v tomto případě kód neroste. Zřejmě je překladač docela inteligentní. A jde tak ukládat do fifo různá data, včetně složitých objektů. Fifo je tak jednoduché, že může mít všechny metody v hlavičce, tedy default inline. Je však třeba zajistit atomičnost inkrementace a dekrementace délky dat. Použita je metoda se zákazem přerušení a snad funguje. Ona totiž pravděpodobnost, že se proces v přerušení zrovna trefí do té in(de)krementace je tak malá, že je problém to otestovat na selhání, takže to celkem spolehlivě funguje i bez ošetření té bezpečnosti. A u některých architektur je inkrementace či dekrementace buňky v paměti atomická v principu. U této však nikoli. Viz :
8000364: b672 cpsid i
8000366: 6d44 ldr r4, [r0, #84] ; 0x54
8000368: 3c01 subs r4, #1
800036a: 6544 str r4, [r0, #84] ; 0x54
8000328: b662 cpsie i
Zde to nakonec není potřeba - do fronty se zapisuje a čte v přerušení a jediný případ, kdy se zapisuje v main() je stejně ošetřen uzamčením, aby se zapsal do fifo celý paket naráz.
Nakonec bylo lepší udělat pořádný mutex.