X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=bertos%2Fcfg%2Fcompiler.h;h=0d401bcc42e27ba14997b4f1f8b73682050aad3b;hb=088cc866a57a0402f6ba3f232fcf8f59c79626d1;hp=ac60848f5da9eec2b3877e62d8ace28e1ac3847e;hpb=9a7bbb95cf63630ab49e111b0e610df042330abf;p=bertos.git diff --git a/bertos/cfg/compiler.h b/bertos/cfg/compiler.h index ac60848f..0d401bcc 100644 --- a/bertos/cfg/compiler.h +++ b/bertos/cfg/compiler.h @@ -54,10 +54,14 @@ #pragma c99 on #endif -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - #define COMPILER_C99 1 -#else - #define COMPILER_C99 0 +#if defined(__STDC_VERSION__) + #if (__STDC_VERSION__ == 199409L) // IAR + #define COMPILER_C99 1 // not true, because partial C99, avoid miscompilation + #elif (__STDC_VERSION__ >= 199901L) // GCC + #define COMPILER_C99 1 + #else + #define COMPILER_C99 0 + #endif #endif @@ -105,12 +109,20 @@ #pragma language=extended - #if CPU_ARM + /* IAR iccarm specific functions */ + #include + #pragma diag_suppress=Pe940 + #pragma inline = forced + + #define MEMORY_BARRIER asm("") + + #if CPU_ARM || CPU_CM3 #define COMPILER_VARIADIC_MACROS 1 #define INTERRUPT(x) __irq __arm void x (void) #define INLINE static inline + #define NAKED /* Include some standard C89/C99 stuff */ #include @@ -217,7 +229,7 @@ #endif /** - * Force compiler to realod context variable. + * Force compiler to reload context variable. */ #define MEMORY_BARRIER asm volatile ("" : : : "memory") @@ -450,6 +462,9 @@ #endif #endif +/** User defined callback type */ +typedef void (*Hook)(void *); + /** Bulk storage large enough for both pointers or integers. */ typedef void * iptr_t; @@ -616,6 +631,10 @@ typedef struct Signal * a refetch from memory. This also forbid from reordering successing instances * of ACCESS_SAFE(). */ +#ifdef __ICCARM__ +#define ACCESS_SAFE(x) x +#else #define ACCESS_SAFE(x) (*(volatile typeof(x) *)&(x)) +#endif #endif /* BERTOS_COMPILER_H */