Add type-size definitions for preprocessor.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 24 Aug 2004 13:16:11 +0000 (13:16 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 24 Aug 2004 13:16:11 +0000 (13:16 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@146 38d2e660-2303-0410-9eaa-f027e97ec537

cpu.h
mware/fifobuf.h

diff --git a/cpu.h b/cpu.h
index ef3e15166930b1e9e6ac66a10625ddfa29fb14ed..85985755de6fb4cd9fb11de6b795c6205b919b1e 100755 (executable)
--- a/cpu.h
+++ b/cpu.h
@@ -17,6 +17,9 @@
 
 /*
  * $Log$
+ * Revision 1.13  2004/08/24 13:16:00  bernie
+ * Add type-size definitions for preprocessor.
+ *
  * Revision 1.12  2004/08/14 19:37:57  rasky
  * Merge da SC: macros.h, pool.h, BIT_CHANGE, nome dei processi, etc.
  *
@@ -78,6 +81,7 @@
        typedef uint16_t cpuflags_t; // FIXME
        typedef unsigned int cpustack_t;
 
+       #define CPU_REG_BITS            16
        #define CPU_REGS_CNT            16
        #define CPU_STACK_GROWS_UPWARD  0
        #define CPU_SP_ON_EMPTY_SLOT    0
@@ -92,6 +96,7 @@
        typedef uint32_t cpuflags_t; // FIXME
        typedef uint32_t cpustack_t;
 
+       #define CPU_REG_BITS            32
        #define CPU_REGS_CNT            7
        #define CPU_STACK_GROWS_UPWARD  0
        #define CPU_SP_ON_EMPTY_SLOT    0
        typedef uint16_t cpuflags_t;
        typedef unsigned int cpustack_t;
 
+       #define CPU_REG_BITS            16
        #define CPU_REGS_CNT            FIXME
        #define CPU_SAVED_REGS_CNT      8
        #define CPU_STACK_GROWS_UPWARD  1
        #define CPU_SP_ON_EMPTY_SLOT    0
        #define CPU_BYTE_ORDER          CPU_BIG_ENDIAN
 
+       /* Memory is word-addessed in the DSP56K */
+       #define BITSP_PER_CHAR  16
+       #define SIZEOF_SHORT     1
+       #define SIZEOF_INT       1
+       #define SIZEOF_LONG      2
+       #define SIZEOF_PTR       1
+
 #elif CPU_AVR
 
        #define NOP                     asm volatile ("nop" ::)
        typedef uint8_t cpustack_t;
 
        /* Register counts include SREG too */
-       #define CPU_REGS_CNT            33
-       #define CPU_SAVED_REGS_CNT      19
+       #define CPU_REG_BITS            8
+       #define CPU_REGS_CNT           33
+       #define CPU_SAVED_REGS_CNT     19
        #define CPU_STACK_GROWS_UPWARD  0
-       #define CPU_SP_ON_EMPTY_SLOT    1
+       #define CPU_SP_ON_EMPTY_SLOT    1
        #define CPU_BYTE_ORDER          CPU_LITTLE_ENDIAN
 
        /*!
 #endif
 
 
+/*!
+ * \def SIZEOF_CHAR SIZEOF_SHORT SIZEOF_INT SIZEOF_LONG SIZEOF_PTR
+ * \def BITS_PER_CHAR BITS_PER_SHORT BITS_PER_INT BITS_PER_LONG BITS_PER_PTR
+ *
+ * \brief Default type sizes
+ *
+ * These defaults are reasonable for most 16/32bit machines.
+ * Some of these macros may be overridden by CPU-specific code above.
+ *
+ * ANSI C specifies that the following equations must be true:
+ * \code
+ *   sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
+ *   sizeof(float) <= sizeof(double)
+ *   BITS_PER_CHAR  >= 8
+ *   BITS_PER_SHORT >= 8
+ *   BITS_PER_INT   >= 16
+ *   BITS_PER_LONG  >= 32
+ * \end code
+ * \{
+ */
+#ifndef SIZEOF_CHAR
+#define SIZEOF_CHAR  1
+#endif
+
+#ifndef SIZEOF_SHORT
+#define SIZEOF_SHORT  2
+#endif
+
+#ifndef SIZEOF_INT
+#if CPU_REG_BITS < 32
+       #define SIZEOF_INT  2
+#else
+       #define SIZEOF_INT  4
+#endif
+#endif /* !SIZEOF_INT */
+
+#ifndef SIZEOF_LONG
+#define SIZEOF_LONG  4
+#endif
+
+#ifndef SIZEOF_PTR
+#define SIZEOF_PTR   SIZEOF_INT
+#endif
+
+#ifndef BITS_PER_CHAR
+#define BITS_PER_CHAR   (SIZEOF_CHAR * 8)
+#endif
+
+#ifndef BITS_PER_SHORT
+#define BITS_PER_SHORT  (SIZEOF_SHORT * BITS_PER_CHAR)
+#endif
+
+#ifndef BITS_PER_INT
+#define BITS_PER_INT    (SIZEOF_INT * BITS_PER_CHAR)
+#endif
+
+#ifndef BITS_PER_LONG
+#define BITS_PER_LONG   (SIZEOF_LONG * BITS_PER_CHAR)
+#endif
+
+#ifndef BITS_PER_PTR
+#define BITS_PER_PTR    (SIZEOF_PTR * BITS_PER_CHAR)
+#endif
+/*\}*/
+
+
 /*!
  * \def SCHEDULER_IDLE
  *
                EXTERN_C_BEGIN
                void SchedulerIdle(void);
                EXTERN_C_END
+               #define SCHEDULER_IDLE SchedulerIdle()
        #else /* !ARCH_EMUL */
-               #define SCHEDULER_IDLE /* nothing */
+               #define SCHEDULER_IDLE do { /* nothing */ } while (0)
        #endif /* !ARCH_EMUL */
 #endif /* !SCHEDULER_IDLE */
 
index 12de29495cf64fc9bbafc8eb0ba14cfeb366c664..5caf1c3a846ba12c570c53583617468f3d3c89a7 100755 (executable)
@@ -43,6 +43,9 @@
 
 /*
  * $Log$
+ * 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
  *
@@ -190,14 +193,17 @@ INLINE void fifo_flush(FIFOBuffer *fb)
 }
 
 
-#if !CPU_AVR
+#if CPU_REG_BITS >= BITS_PER_PTR
 
-       /* No tricks needed on 16/32bit CPUs */
-#      define fifo_isempty_locked(fb) fifo_isempty((fb))
-#      define fifo_push_locked(fb, c) fifo_push((fb), (c))
-#      define fifo_flush_locked(fb) fifo_flush((fb))
+       /*
+        * 16/32bit CPUs that can update a pointer with a single write
+        * operation, no need to disable interrupts.
+        */
+       #define fifo_isempty_locked(fb) fifo_isempty((fb))
+       #define fifo_push_locked(fb, c) fifo_push((fb), (c))
+       #define fifo_flush_locked(fb) fifo_flush((fb))
 
-#else /* !CPU_AVR */
+#else /* CPU_REG_BITS < BITS_PER_PTR */
 
        /*!
         * Similar to fifo_isempty(), but with stronger guarantees for
@@ -219,6 +225,7 @@ INLINE void fifo_flush(FIFOBuffer *fb)
                return result;
        }
 
+
        /*!
         * Similar to fifo_push(), but with stronger guarantees for
         * concurrent access between user and interrupt code.
@@ -235,6 +242,7 @@ INLINE void fifo_flush(FIFOBuffer *fb)
                ENABLE_IRQRESTORE(flags);
        }
 
+
        /*!
         * Similar to fifo_flush(), but with stronger guarantees for
         * concurrent access between user and interrupt code.
@@ -251,7 +259,7 @@ INLINE void fifo_flush(FIFOBuffer *fb)
                ENABLE_IRQRESTORE(flags);
        }
 
-#endif /* !CPU_AVR */
+#endif /* CPU_REG_BITS < BITS_PER_PTR */
 
 
 /*!