X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=mware%2Fpgm.h;h=4bd1018c451f7020f598f2800b6f812698591795;hb=3b33848a29f6a9ba49a2913ba6b721e01d8b95f5;hp=d8ef9f5426df09b5996b9c0c0ce64a7cf70d762c;hpb=64969cdb6b48f50b642178779baf9e1e317e0645;p=bertos.git diff --git a/mware/pgm.h b/mware/pgm.h index d8ef9f54..4bd1018c 100755 --- a/mware/pgm.h +++ b/mware/pgm.h @@ -22,7 +22,9 @@ #ifndef MWARE_PGM_H #define MWARE_PGM_H -#include +#include +#include /* For intXX_t */ +#include /* For CPU_HARVARD */ #if CPU_AVR @@ -74,7 +76,8 @@ }) - #else + #else /* !__AVR_ENHANCED__ */ + #define pgm_read_char(addr) \ ({ \ uint16_t __addr16 = (uint16_t)(addr); \ @@ -133,10 +136,20 @@ __result; \ }) + #endif /* !__AVR_ENHANCED__ */ + + #if SIZEOF_INT == 2 + #define pgm_read_int(addr) ((int)pgm_read_uint16_t(addr)) + #else + #error Missing support for CPU word size != 16bit #endif + #ifndef PROGMEM #define PROGMEM __attribute__((__progmem__)) + #endif + #ifndef PSTR #define PSTR(s) ({ static const char __c[] PROGMEM = (s); &__c[0]; }) + #endif #elif CPU_HARVARD #error Missing CPU support @@ -147,7 +160,7 @@ #endif #ifndef PROGMEM -#define PROGMEM /* nothing */ +#define PROGMEM /* nothing */ #endif /*! @@ -164,9 +177,7 @@ typedef PROGMEM uint32_t pgm_uint32_t; /*\}*/ /*! - * \def PGM_READ_CHAR - * \def PGM_FUNC - * \def PGM_ATTR + * \name PGM support macros. * * These macros enable dual compilation of code for both program * and data memory. @@ -193,16 +204,21 @@ typedef PROGMEM uint32_t pgm_uint32_t; * // To be used when invoking inside other PGM_FUNC functions: * PGM_FUNC(lcd_puts)(some_string); * \endcode + * + * \{ */ #ifdef _PROGMEM #define PGM_READ_CHAR(s) pgm_read_char(s) #define PGM_FUNC(x) x ## _P + #define PGM_STR(x) PSTR(x) #define PGM_ATTR PROGMEM #else #define PGM_READ_CHAR(s) (*(s)) #define PGM_FUNC(x) x + #define PGM_STR(x) x #define PGM_ATTR /* nothing */ #endif +/* \} */ #endif /* MWARE_PGM_H */