X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Ftypes.h;h=dcddaa59b8d6e228fd8715f42deb92e3e397dd8d;hb=327806d9c3793f6e250c19df053686e200f1c559;hp=8b8179387769e1a29a7506d2e9371dccec5ef560;hpb=e62ca0b357f09804d7d894949df44224c9d74bb7;p=bertos.git diff --git a/bertos/cpu/types.h b/bertos/cpu/types.h index 8b817938..dcddaa59 100644 --- a/bertos/cpu/types.h +++ b/bertos/cpu/types.h @@ -43,15 +43,18 @@ #include "detect.h" #include "attr.h" +#include #include /* for uintXX_t */ #if CPU_I196 typedef uint16_t cpu_flags_t; // FIXME typedef unsigned int cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; typedef unsigned int cpu_atomic_t; #warning Verify following constant #define SIZEOF_CPUSTACK_T 2 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #elif CPU_X86 @@ -65,19 +68,26 @@ #if CPU_X86_64 typedef uint64_t cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; #define SIZEOF_CPUSTACK_T 8 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #else typedef uint32_t cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; #define SIZEOF_CPUSTACK_T 4 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #endif -#elif CPU_ARM +#elif CPU_ARM || CPU_CM3 typedef uint32_t cpu_flags_t; typedef uint32_t cpu_atomic_t; typedef uint32_t cpu_stack_t; #define SIZEOF_CPUSTACK_T 4 + typedef uint64_t cpu_aligned_stack_t; + #define SIZEOF_CPUALIGNED_T 8 + #elif CPU_PPC /* Get cpu_flags_t definition from the hosting environment. */ @@ -88,22 +98,36 @@ typedef uint32_t cpu_atomic_t; typedef uint32_t cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; #define SIZEOF_CPUSTACK_T 4 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #elif CPU_DSP56K typedef uint16_t cpu_flags_t; typedef uint16_t cpu_atomic_t; typedef unsigned int cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; #warning Verify following costant #define SIZEOF_CPUSTACK_T 2 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #elif CPU_AVR typedef uint8_t cpu_flags_t; typedef uint8_t cpu_atomic_t; typedef uint8_t cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; #define SIZEOF_CPUSTACK_T 1 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T + +#elif CPU_MSP430 + + typedef uint16_t cpu_flags_t; + typedef uint16_t cpu_stack_t; + typedef cpu_stack_t cpu_aligned_stack_t; + #define SIZEOF_CPUSTACK_T 2 + #define SIZEOF_CPUALIGNED_T SIZEOF_CPUSTACK_T #else #error No CPU_... defined. @@ -160,6 +184,16 @@ #endif #endif +#ifndef SIZEOF_SIZE_T +#if CPU_REG_BITS < 32 + #define SIZEOF_SIZE_T 2 +#elif CPU_REG_BITS == 32 + #define SIZEOF_SIZE_T 4 +#else /* CPU_REG_BITS > 32 */ + #define SIZEOF_SIZE_T 8 +#endif +#endif + #ifndef CPU_BITS_PER_CHAR #define CPU_BITS_PER_CHAR (SIZEOF_CHAR * 8) #endif @@ -183,6 +217,11 @@ /*\}*/ +#ifndef INT_MAX + #define INT_MAX ((int)((unsigned int)~0 >> 1)) + #define INT_MIN (-INT_MAX - 1) +#endif + /* Sanity checks for the above definitions */ STATIC_ASSERT(sizeof(char) == SIZEOF_CHAR); STATIC_ASSERT(sizeof(short) == SIZEOF_SHORT); @@ -200,6 +239,17 @@ STATIC_ASSERT(sizeof(int64_t) * CPU_BITS_PER_CHAR == 64); STATIC_ASSERT(sizeof(uint64_t) * CPU_BITS_PER_CHAR == 64); #endif STATIC_ASSERT(sizeof(cpu_stack_t) == SIZEOF_CPUSTACK_T); +STATIC_ASSERT(sizeof(cpu_aligned_stack_t) == SIZEOF_CPUALIGNED_T); +STATIC_ASSERT(sizeof(size_t) == SIZEOF_SIZE_T); +/** + * Macros for hardware access, both direct and via the bit-band region. + */ +/*\{*/ +#define HWREG(x) (*((reg32_t *)(x))) +#define HWREGH(x) (*((reg16_t *)(x))) +#define HWREGB(x) (*((reg8_t *)(x))) +/*\}*/ + #endif /* CPU_TYPES_H */