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))
156 void*
memcpy_P(
void* dest,
const void* src_P,
size_t length);
157 int memcmp_P(
const void* a1,
const void* b1,
size_t len);
160 char*
strncpy_P(
char* dest,
const char* src_P,
size_t size);
161 int strcmp_P(
const char* str1,
const char* str2_P);
162 int strncmp_P(
const char* str1,
const char* str2_P,
const size_t size);
165 char*
strstr_P(
char* haystack,
const char* needle_P);
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)
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
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
int memcmp_P(const void *a1, const void *b1, size_t len)
#define pgm_read_with_offset(addr, res)
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:111
char * strcat_P(char *dest, const char *src_P)
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 strcasecmp_P(const char *str1, const char *str2_P)
char * strcpy_P(char *dest, const char *src_P)
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
int strncmp_P(const char *str1, const char *str2_P, const size_t size)
char * strstr_P(char *haystack, const char *needle_P)
size_t strlen_P(const char *src_P)
void * memcpy_P(void *dest, const void *src_P, size_t length)
static uint16_t pgm_read_word_inlined(const void *addr)
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:129
char * strncpy_P(char *dest, const char *src_P, size_t size)
int strcmp_P(const char *str1, const char *str2_P)
int8_t prog_int8_t
Definition: Arch/Esp8266/Components/libc/include/sys/pgmspace.h:97