#include "detect.h"
+#include "cfg/cfg_proc.h" /* CONFIG_KERN_PREEMPT */
#include "cfg/cfg_attr.h" /* CONFIG_FAST_MEM */
#ifdef __GNUC__
#define NOP asm volatile ("nop")
+ /* This is a good thing to insert into busy-wait loops. */
+ #define PAUSE asm volatile ("rep; nop" ::: "memory")
#define BREAKPOINT asm volatile ("int3" ::)
#endif
/// Valid pointers should be >= than this value (used for debug)
#if CPU_ARM_AT91
#define CPU_RAM_START 0x00200000
+ #elif CPU_ARM_LM3S1968
+ #define CPU_RAM_START 0x20000000
#else
#warning Fix CPU_RAM_START address for your ARM, default value set to 0x200
#define CPU_RAM_START 0x200
+ #endif
#ifdef __IAR_SYSTEMS_ICC__
#warning Check CPU_BYTE_ORDER
#define FAST_FUNC /**/
#endif
- /**
- * Function attribute to declare an interrupt service routine.
+ /*
+ * Function attribute to move it into ram memory.
*/
- #define ISR_FUNC __attribute__((interrupt))
+ #define RAM_FUNC __attribute__((section(".data")))
#endif /* !__IAR_SYSTEMS_ICC_ */
/// Valid pointers should be >= than this value (used for debug)
#if CPU_AVR_ATMEGA8 || CPU_AVR_ATMEGA32 || CPU_AVR_ATMEGA103
#define CPU_RAM_START 0x60
- #elif CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA168
+ #elif CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128 || CPU_AVR_ATMEGA168 || CPU_AVR_ATMEGA328P
#define CPU_RAM_START 0x100
#elif CPU_AVR_ATMEGA1281
#define CPU_RAM_START 0x200
#else
#warning Fix CPU_RAM_START address for your AVR, default value set to 0x100
#define CPU_RAM_START 0x100
+ #endif
#else
#error No CPU_... defined.
#define FAST_RODATA /* */
#endif
+#ifndef PAUSE
+ /// Generic PAUSE implementation.
+ #define PAUSE {NOP; MEMORY_BARRIER;}
+#endif
+
#endif /* CPU_ATTR_H */