13 #include <sys/features.h>
22 #define FLASH_MEMORY_START_ADDR 0x40200000
27 #define isFlashPtr(ptr) ((uint32_t)ptr >= FLASH_MEMORY_START_ADDR)
36 #define PROGMEM STORE_ATTR ICACHE_RODATA_ATTR
44 #define PROGMEM_PSTR \
46 __attribute__((section("\".irom0.pstr." __FILE__ \
47 "." MACROQUOTE(__LINE__) "." MACROQUOTE(__COUNTER__) "\", \"aSM\", @progbits, 1 #")))
57 static const char __pstr__[] PROGMEM_PSTR = str; \
65 #include_next <sys/pgmspace.h>
82 #define PGM_P const char*
111 #define pgm_read_with_offset(addr, res) \
112 __asm__("extui %0, %1, 0, 2\n" \
114 "l32i.n %1, %1, 0x0\n" \
117 : "=r"(res), "=r"(addr) \
133 return (uint16_t)res;
142 #define pgm_read_byte(addr) pgm_read_byte_inlined(addr)
143 #define pgm_read_word(addr) pgm_read_word_inlined(addr)
146 #define pgm_read_dword(addr) (*(const unsigned long*)(addr))
147 #define pgm_read_float(addr) (*(const float*)(addr))
167 #define sprintf_P(s, f_P, ...) \
169 int len_P = strlen_P(f_P); \
171 char* __localF = (char*)malloc(len_P + 1); \
173 strcpy_P(__localF, f_P); \
174 __localF[len_P] = '\0'; \
176 __result = m_snprintf(s, len_P, __localF, ##__VA_ARGS__); \
187 #define pgm_read_byte_near(addr) pgm_read_byte(addr)
188 #define pgm_read_word_near(addr) pgm_read_word(addr)
189 #define pgm_read_dword_near(addr) pgm_read_dword(addr)
190 #define pgm_read_float_near(addr) pgm_read_float(addr)
191 #define pgm_read_byte_far(addr) pgm_read_byte(addr)
192 #define pgm_read_word_far(addr) pgm_read_word(addr)
193 #define pgm_read_dword_far(addr) pgm_read_dword(addr)
194 #define pgm_read_float_far(addr) pgm_read_float(addr)
#define PGM_VOID_P
Definition: Arch/Esp32/Components/libc/src/include/sys/pgmspace.h:31
uint16_t prog_uint16_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:100
uint32_t prog_uint32_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:102
char * strcat_P(char *dest, PGM_P src_P)
uint8_t prog_uint8_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:98
void prog_void
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:94
size_t strlen_P(PGM_VOID_P src_P)
#define pgm_read_with_offset(addr, res)
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:111
unsigned char prog_uchar
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:96
static uint8_t pgm_read_byte_inlined(const void *addr)
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:121
int memcmp_P(const void *buf1, PGM_VOID_P buf2_P, size_t len)
int16_t prog_int16_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:99
char prog_char
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:95
int32_t prog_int32_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:101
char * strstr_P(char *haystack, PGM_P needle_P)
char * strncpy_P(char *dest, PGM_P src_P, size_t size)
int strncmp_P(const char *str1, PGM_P str2_P, const size_t size)
int strcmp_P(const char *str1, PGM_P str2_P)
static uint16_t pgm_read_word_inlined(const void *addr)
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:129
int8_t prog_int8_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:97
void * memcpy_P(void *dest, PGM_VOID_P src_P, size_t length)
int strcasecmp_P(const char *str1, PGM_P str2_P)
char * strcpy_P(char *dest, PGM_P src_P)
#define PGM_P
Identifies a char pointer as living in flash memory Use to clarify code.
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:82