X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Ffifobuf.h;h=c6b203c5858c0c39fc4e5041514eb06716cc418f;hb=35ae4275d8730a376ca61a92f08fb447eb2935b3;hp=3bc2b5d02310063c3d20c51286cc5f42884882a0;hpb=79736373558decc45719f06e34cc6d67ef04f23d;p=bertos.git diff --git a/mware/fifobuf.h b/mware/fifobuf.h old mode 100755 new mode 100644 index 3bc2b5d0..c6b203c5 --- a/mware/fifobuf.h +++ b/mware/fifobuf.h @@ -1,9 +1,34 @@ -/*! +/** * \file * * * \version $Id$ @@ -41,56 +66,12 @@ * \code head == begin && tail == end \endcode */ -/*#* - *#* $Log$ - *#* Revision 1.17 2004/09/14 20:57:00 bernie - *#* Use debug.h instead of kdebug.h. - *#* - *#* 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 typedef struct FIFOBuffer { @@ -110,7 +91,7 @@ typedef struct FIFOBuffer ) -/*! +/** * Check whether the fifo is empty * * \note Calling fifo_isempty() is safe while a concurrent @@ -127,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 @@ -149,7 +130,7 @@ INLINE bool fifo_isfull(const FIFOBuffer *fb) } -/*! +/** * Pop a character from the fifo buffer. * * \note Calling \c fifo_push() on a full buffer is undefined. @@ -182,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. @@ -211,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) @@ -234,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. * @@ -250,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. * @@ -271,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. * @@ -287,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) @@ -298,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; }