X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Fattr.h;h=e0e97ef37b24ae156c24264ec2a29222284fb02c;hb=f27e89243740eda77ee5a845e0b7a38f6964f9e2;hp=56b09e75649e622b965a6404b3c1b595421917fb;hpb=2d83384376f703c326220effb215409be0cae7c4;p=bertos.git diff --git a/bertos/cpu/attr.h b/bertos/cpu/attr.h index 56b09e75..e0e97ef3 100644 --- a/bertos/cpu/attr.h +++ b/bertos/cpu/attr.h @@ -144,7 +144,7 @@ * to get them transparently copied to SRAM for zero-wait-state * operation. */ - #define FAST_FUNC __attribute__((section(".data"))) + #define FAST_FUNC __attribute__((section(".ramfunc"))) /** * Data attribute to move constant data to fast memory storage. @@ -161,7 +161,7 @@ /* * Function attribute to move it into ram memory. */ - #define RAM_FUNC __attribute__((section(".data"))) + #define RAM_FUNC __attribute__((section(".ramfunc"))) #endif /* !__IAR_SYSTEMS_ICC_ */ #elif CPU_CM3 @@ -178,13 +178,24 @@ #define CPU_RAM_START 0x20000000 #endif - #if defined(__ARMEB__) - #define CPU_BYTE_ORDER CPU_BIG_ENDIAN - #elif defined(__ARMEL__) - #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN - #else - #error Unable to detect Cortex-M3 endianess! - #endif + #if defined( __ICCARM__) + #if ((defined __LITTLE_ENDIAN__) && (__LITTLE_ENDIAN__ == 0)) + #define CPU_BYTE_ORDER CPU_BIG_ENDIAN + #elif ((defined __LITTLE_ENDIAN__) && (__LITTLE_ENDIAN__ == 1)) + #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN + #else + #error Unable to detect Cortex-M3 endianess! + #endif + + #define NOP __no_operation() + #else + #if defined(__ARMEB__) // GCC + #define CPU_BYTE_ORDER CPU_BIG_ENDIAN + #elif defined(__ARMEL__) // GCC + #define CPU_BYTE_ORDER CPU_LITTLE_ENDIAN + #else + #error Unable to detect Cortex-M3 endianess! + #endif #define NOP asm volatile ("nop") #define PAUSE asm volatile ("wfi" ::: "memory") @@ -193,7 +204,8 @@ /* * Function attribute to move it into ram memory. */ - #define RAM_FUNC __attribute__((section(".data"))) + #define RAM_FUNC __attribute__((section(".ramfunc"))) + #endif #elif CPU_PPC @@ -246,6 +258,8 @@ #define CPU_RAM_START 0x100 #elif CPU_AVR_ATMEGA1281 || CPU_AVR_ATMEGA1280 || CPU_AVR_ATMEGA2560 #define CPU_RAM_START 0x200 + #elif CPU_AVR_XMEGA_D + #define CPU_RAM_START 0x2000 #else #warning Fix CPU_RAM_START address for your AVR, default value set to 0x100 #define CPU_RAM_START 0x100 @@ -283,7 +297,7 @@ #ifndef PAUSE /// Generic PAUSE implementation. - #define PAUSE {NOP; MEMORY_BARRIER;} + #define PAUSE do {NOP; MEMORY_BARRIER;} while (0) #endif #endif /* CPU_ATTR_H */