X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=cpu.h;h=31966d7852a0f5696c81ce7f212e71c82726c110;hb=f78e7b82ce293dabb9695e3656c244b955fbb9d2;hp=ef3e15166930b1e9e6ac66a10625ddfa29fb14ed;hpb=ea4ef51b306fde6480c03f72e81c4b31d51660f6;p=bertos.git diff --git a/cpu.h b/cpu.h index ef3e1516..31966d78 100755 --- a/cpu.h +++ b/cpu.h @@ -17,6 +17,9 @@ /* * $Log$ + * Revision 1.14 2004/08/24 13:29:28 bernie + * Trim CVS log; Rename header guards. + * * Revision 1.12 2004/08/14 19:37:57 rasky * Merge da SC: macros.h, pool.h, BIT_CHANGE, nome dei processi, etc. * @@ -29,36 +32,11 @@ * Revision 1.9 2004/07/30 14:24:16 rasky * Task switching con salvataggio perfetto stato di interrupt (SR) * Kernel monitor per dump informazioni su stack dei processi - * - * Revision 1.8 2004/07/30 14:15:53 rasky - * Nuovo supporto unificato per detect della CPU - * - * Revision 1.7 2004/07/20 23:26:48 bernie - * Fix two errors introduced by previous commit. - * - * Revision 1.6 2004/07/20 23:12:16 bernie - * Rationalize and document SCHEDULER_IDLE. - * - * Revision 1.5 2004/07/20 16:20:35 bernie - * Move byte-order macros to mware/byteorder.h; Add missing author names. - * - * Revision 1.4 2004/07/20 16:06:04 bernie - * Add macros to handle endianess issues. - * - * Revision 1.3 2004/07/18 21:49:51 bernie - * Fixes for GCC 3.5. - * - * Revision 1.2 2004/06/03 11:27:09 bernie - * Add dual-license information. - * - * Revision 1.1 2004/05/23 17:48:35 bernie - * Add top-level files. - * */ -#ifndef CPU_H -#define CPU_H +#ifndef DEVLIB_CPU_H +#define DEVLIB_CPU_H -#include "compiler.h" +#include "compiler.h" /* for uintXX_t, PP_CAT3(), PP_STRINGIZE() */ // Macros for determining CPU endianness @@ -78,6 +56,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 +71,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 @@ -111,12 +91,20 @@ 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" ::) @@ -143,10 +131,11 @@ 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 /*! @@ -238,6 +227,72 @@ #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 * @@ -253,9 +308,10 @@ 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 */ -#endif /* CPU_H */ +#endif /* DEVLIB_CPU_H */