12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #ifndef FIFO_H_
- #define FIFO_H_
- #include <stdint.h>
- //ðàçìåð äîëæåí áûòü ñòåïåíüþ äâîéêè: 4,8,16,32...128
- #define FIFO( size )\
- struct {\
- uint8_t buf[size];\
- uint16_t tail;\
- uint16_t head;\
- }
- //êîëè÷åñòâî ýëåìåíòîâ â î÷åðåäè
- #define FIFO_COUNT(fifo) (fifo.head-fifo.tail)
- //ðàçìåð fifo
- #define FIFO_SIZE(fifo) ( sizeof(fifo.buf) / sizeof(fifo.buf[0]) )
- //fifo çàïîëíåíî?
- #define FIFO_IS_FULL(fifo) (FIFO_COUNT(fifo)==FIFO_SIZE(fifo))
- //fifo ïóñòî?
- #define FIFO_IS_EMPTY(fifo) (fifo.tail==fifo.head)
- //êîëè÷åñòâî ñâîáîäíîãî ìåñòà â fifo
- #define FIFO_SPACE(fifo) (FIFO_SIZE(fifo)-FIFO_COUNT(fifo))
- //ïîìåñòèòü ýëåìåíò â fifo
- #define FIFO_PUSH(fifo, byte) \
- {\
- fifo.buf[fifo.head & (FIFO_SIZE(fifo)-1)]=byte;\
- fifo.head++;\
- }
- //âçÿòü ïåðâûé ýëåìåíò èç fifo
- #define FIFO_FRONT(fifo) (fifo.buf[fifo.tail & (FIFO_SIZE(fifo)-1)])
- //óìåíüøèòü êîëè÷åñòâî ýëåìåíòîâ â î÷åðåäè
- #define FIFO_POP(fifo) \
- {\
- fifo.tail++; \
- }
- //î÷èñòèòü fifo
- #define FIFO_FLUSH(fifo) \
- {\
- fifo.tail=0;\
- fifo.head=0;\
- }
- #endif /* FIFO_H_ */
|