-/*!
+/**
* \file
* <!--
* Copyright 2005 Develer S.r.l. (http://www.develer.com/)
); \
__result; \
})
- #if 0 // 128/103
- #define pgm_read_uint16_t(addr) \
- ({ \
- uint32_t __addr32 = (uint32_t)(addr); \
- uint16_t __result; \
- __asm__ \
- ( \
- "out %2, %C1" "\n\t" \
- "movw r30, %1" "\n\t" \
- "elpm %A0, Z+" "\n\t" \
- "elpm %B0, Z" "\n\t" \
- : "=r" (__result) \
- : "r" (__addr32), \
- "I" (_SFR_IO_ADDR(RAMPZ)) \
- : "r30", "r31" \
- ); \
- __result; \
- })
- #endif
-
#define pgm_read_uint16_t(addr) \
({ \
uint16_t __addr16 = (uint16_t)(addr); \
); \
__result; \
})
- #if 0 // 128/103
- #define pgm_read_uint16_t(addr) \
- ({ \
- uint32_t __addr32 = (uint32_t)(addr); \
- uint16_t __result; \
- __asm__ \
- ( \
- "out %2, %C1" "\n\t" \
- "mov r31, %B1" "\n\t" \
- "mov r30, %A1" "\n\t" \
- "elpm" "\n\t" \
- "mov %A0, r0" "\n\t" \
- "in r0, %2" "\n\t" \
- "adiw r30, 1" "\n\t" \
- "adc r0, __zero_reg__" "\n\t" \
- "out %2, r0" "\n\t" \
- "elpm" "\n\t" \
- "mov %B0, r0" "\n\t" \
- : "=r" (__result) \
- : "r" (__addr32), \
- "I" (_SFR_IO_ADDR(RAMPZ)) \
- : "r0", "r30", "r31" \
- ); \
- __result; \
- })
- #endif
#define pgm_read_uint16_t(addr) \
({ \
uint16_t __addr16 = (uint16_t)(addr); \
#define PROGMEM /* nothing */
#endif
-/*!
+/**
* \name Types for variables stored in program memory (harvard processors).
* \{
*/
typedef PROGMEM uint32_t pgm_uint32_t;
/*\}*/
-/*!
+/**
* \name PGM support macros.
*
* These macros enable dual compilation of code for both program