@@ -37,18 +37,33 @@ typedef unsigned long prog_uint32_t;
3737#define _SFR_BYTE (n ) (n)
3838
3939#define pgm_read_byte (addr ) (*(const unsigned char *)(addr))
40- #define pgm_read_word (addr ) (*(const unsigned short *)(addr))
41- #define pgm_read_dword (addr ) (*(const unsigned long *)(addr))
42- #define pgm_read_float (addr ) (*(const float *)(addr))
40+ #define pgm_read_word (addr ) ({ \
41+ typeof(addr) _addr = (addr); \
42+ *(const unsigned short *)(_addr); \
43+ })
44+ #define pgm_read_dword (addr ) ({ \
45+ typeof(addr) _addr = (addr); \
46+ *(const unsigned long *)(_addr); \
47+ })
48+ #define pgm_read_float (addr ) ({ \
49+ typeof(addr) _addr = (addr); \
50+ *(const float *)(_addr); \
51+ })
52+ #define pgm_read_ptr (addr ) ({ \
53+ typeof(addr) _addr = (addr); \
54+ *(void * const *)(_addr); \
55+ })
4356
4457#define pgm_read_byte_near (addr ) pgm_read_byte(addr)
4558#define pgm_read_word_near (addr ) pgm_read_word(addr)
4659#define pgm_read_dword_near (addr ) pgm_read_dword(addr)
4760#define pgm_read_float_near (addr ) pgm_read_float(addr)
61+ #define pgm_read_ptr_near (addr ) pgm_read_ptr(addr)
4862#define pgm_read_byte_far (addr ) pgm_read_byte(addr)
4963#define pgm_read_word_far (addr ) pgm_read_word(addr)
5064#define pgm_read_dword_far (addr ) pgm_read_dword(addr)
5165#define pgm_read_float_far (addr ) pgm_read_float(addr)
66+ #define pgm_read_ptr_far (addr ) pgm_read_ptr(addr)
5267
5368#define memcmp_P memcmp
5469#define memccpy_P memccpy
0 commit comments