X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Ffifobuf.h;h=cb634ee32ffe14e004c97a6645260380d333ba81;hb=99fafc49f3b2d50abb2d7b8b4cbbd3be8e107bef;hp=a9b1d6bbf05ba7eff2b9a0d84e1df772185d998a;hpb=be9ac9393488e2405363686f4ba61b84006cb1ad;p=bertos.git diff --git a/mware/fifobuf.h b/mware/fifobuf.h old mode 100755 new mode 100644 index a9b1d6bb..cb634ee3 --- a/mware/fifobuf.h +++ b/mware/fifobuf.h @@ -1,9 +1,34 @@ -/*! +/** * \file * * * \version $Id$ @@ -41,54 +66,12 @@ * \code head == begin && tail == end \endcode */ -/*#* - *#* $Log$ - *#* Revision 1.16 2004/09/06 21:39:08 bernie - *#* Simplify code using ATOMIC(). - *#* - *#* Revision 1.15 2004/08/29 22:05:16 bernie - *#* Rename BITS_PER_PTR to CPU_BITS_PER_PTR. - *#* - *#* Revision 1.14 2004/08/25 14:12:09 rasky - *#* Aggiornato il comment block dei log RCS - *#* - *#* Revision 1.13 2004/08/24 13:16:11 bernie - *#* Add type-size definitions for preprocessor. - *#* - *#* Revision 1.12 2004/08/02 20:20:29 aleph - *#* Merge from project_ks - *#* - *#* Revision 1.11 2004/07/30 14:15:53 rasky - *#* Nuovo supporto unificato per detect della CPU - *#* - *#* Revision 1.10 2004/07/29 22:57:09 bernie - *#* Doxygen fix. - *#* - *#* Revision 1.9 2004/07/20 23:54:27 bernie - *#* fifo_flush_locked(): New function; - *#* Revamp documentation. - *#* - *#* Revision 1.8 2004/07/20 23:47:39 bernie - *#* Finally remove redundant protos. - *#* - *#* Revision 1.7 2004/07/20 23:46:29 bernie - *#* Finally remove redundant protos. - *#* - *#* Revision 1.6 2004/06/06 17:18:04 bernie - *#* Remove redundant declaration of fifo_isempty_locked(). - *#* - *#* Revision 1.5 2004/06/06 16:50:35 bernie - *#* Import fixes for race conditions from project_ks. - *#* - *#* Revision 1.4 2004/06/06 16:11:17 bernie - *#* Protect MetroWerks specific pragmas with #ifdef's - *#*/ - #ifndef MWARE_FIFO_H #define MWARE_FIFO_H -#include -#include +#include +#include +#include typedef struct FIFOBuffer { @@ -108,7 +91,7 @@ typedef struct FIFOBuffer ) -/*! +/** * Check whether the fifo is empty * * \note Calling fifo_isempty() is safe while a concurrent @@ -125,7 +108,7 @@ INLINE bool fifo_isempty(const FIFOBuffer *fb) } -/*! +/** * Check whether the fifo is full * * \note Calling fifo_isfull() is safe while a concurrent @@ -147,8 +130,8 @@ INLINE bool fifo_isfull(const FIFOBuffer *fb) } -/*! - * Pop a character from the fifo buffer. +/** + * Push a character on the fifo buffer. * * \note Calling \c fifo_push() on a full buffer is undefined. * The caller must make sure the buffer has at least @@ -180,7 +163,7 @@ INLINE void fifo_push(FIFOBuffer *fb, unsigned char c) } -/*! +/** * Pop a character from the fifo buffer. * * \note Calling \c fifo_pop() on an empty buffer is undefined. @@ -209,7 +192,7 @@ INLINE unsigned char fifo_pop(FIFOBuffer *fb) } -/*! +/** * Make the fifo empty, discarding all its current contents. */ INLINE void fifo_flush(FIFOBuffer *fb) @@ -232,7 +215,7 @@ INLINE void fifo_flush(FIFOBuffer *fb) #else /* CPU_REG_BITS < CPU_BITS_PER_PTR */ - /*! + /** * Similar to fifo_isempty(), but with stronger guarantees for * concurrent access between user and interrupt code. * @@ -248,7 +231,7 @@ INLINE void fifo_flush(FIFOBuffer *fb) } - /*! + /** * Similar to fifo_push(), but with stronger guarantees for * concurrent access between user and interrupt code. * @@ -269,7 +252,7 @@ INLINE void fifo_flush(FIFOBuffer *fb) return c; } - /*! + /** * Similar to fifo_flush(), but with stronger guarantees for * concurrent access between user and interrupt code. * @@ -285,7 +268,7 @@ INLINE void fifo_flush(FIFOBuffer *fb) #endif /* CPU_REG_BITS < BITS_PER_PTR */ -/*! +/** * Thread safe version of fifo_isfull() */ INLINE bool fifo_isfull_locked(const FIFOBuffer *_fb) @@ -296,11 +279,14 @@ INLINE bool fifo_isfull_locked(const FIFOBuffer *_fb) } -/*! +/** * FIFO Initialization. */ INLINE void fifo_init(FIFOBuffer *fb, unsigned char *buf, size_t size) { + /* FIFO buffers have a known bug with 1-byte buffers. */ + ASSERT(size > 1); + fb->head = fb->tail = fb->begin = buf; fb->end = buf + size - 1; }