1 #define PROGMEM __attribute__((progmem)) 2 3 #define PSTR(s) \ 4 (__extension__({ \ 5 static const char __c[] PROGMEM = (s); \ 6 &__c[0];})) 7 8 #ifdef __AVR_HAVE_LPMX__ 9 #define pgm_read_char(addr) \ 10 (__extension__({ \ 11 unsigned int __addr16 = (unsigned int)(addr); \ 12 char __result; \ 13 __asm__ ("lpm %0, %a1" \ 14 : "=r" (__result) : "z" (__addr16)); \ 15 __result; })) 16 #elif defined (__AVR_TINY__) 17 /* PR71948 auto-adds 0x4000 as needed, hance just a plain read. */ 18 #define pgm_read_char(addr) \ 19 (*(addr)) 20 #else 21 #define pgm_read_char(addr) \ 22 (__extension__({ \ 23 unsigned int __addr16 = (unsigned int)(addr); \ 24 char __result; \ 25 __asm__ ("lpm" "\n\t" \ 26 "mov %0, r0" \ 27 : "=r" (__result) : "z" (__addr16)); \ 28 __result; })) 29 #endif 30