@@ -37,18 +37,33 @@ typedef unsigned long prog_uint32_t;
37
37
#define _SFR_BYTE (n ) (n)
38
38
39
39
#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
+ })
43
56
44
57
#define pgm_read_byte_near (addr ) pgm_read_byte(addr)
45
58
#define pgm_read_word_near (addr ) pgm_read_word(addr)
46
59
#define pgm_read_dword_near (addr ) pgm_read_dword(addr)
47
60
#define pgm_read_float_near (addr ) pgm_read_float(addr)
61
+ #define pgm_read_ptr_near (addr ) pgm_read_ptr(addr)
48
62
#define pgm_read_byte_far (addr ) pgm_read_byte(addr)
49
63
#define pgm_read_word_far (addr ) pgm_read_word(addr)
50
64
#define pgm_read_dword_far (addr ) pgm_read_dword(addr)
51
65
#define pgm_read_float_far (addr ) pgm_read_float(addr)
66
+ #define pgm_read_ptr_far (addr ) pgm_read_ptr(addr)
52
67
53
68
#define memcmp_P memcmp
54
69
#define memccpy_P memccpy
0 commit comments