@@ -100,11 +100,23 @@ typedef const void* uint_farptr_t;
100100#define snprintf_P (s , f , ...) snprintf((s), (f), __VA_ARGS__)
101101#define vsnprintf_P (o , s , f , a ) vsnprintf((o), (s), (f), (a))
102102
103- #define pgm_read_byte (addr ) (*(const unsigned char *)(addr))
104- #define pgm_read_word (addr ) (*(const unsigned short *)(addr))
105- #define pgm_read_dword (addr ) (*(const unsigned long *)(addr))
106- #define pgm_read_float (addr ) (*(const float *)(addr))
107- #define pgm_read_ptr (addr ) (*(const void *)(addr))
103+ #define pgm_read_byte (addr ) (*(const unsigned char *)(addr))
104+ #define pgm_read_word (addr ) ({ \
105+ typeof(addr) _addr = (addr); \
106+ *(const unsigned short *)(_addr); \
107+ })
108+ #define pgm_read_dword (addr ) ({ \
109+ typeof(addr) _addr = (addr); \
110+ *(const unsigned long *)(_addr); \
111+ })
112+ #define pgm_read_float (addr ) ({ \
113+ typeof(addr) _addr = (addr); \
114+ *(const float *)(_addr); \
115+ })
116+ #define pgm_read_ptr (addr ) ({ \
117+ typeof(addr) _addr = (addr); \
118+ *(void * const *)(_addr); \
119+ })
108120
109121#define pgm_read_byte_near (addr ) pgm_read_byte(addr)
110122#define pgm_read_word_near (addr ) pgm_read_word(addr)
0 commit comments