Оглавление
Урок по использованию PROGMEM
avr/pgmspace.h #
Информация относится к библиотеке avr/pgmspace.h для МК AVR, но для совместимости она поддерживается и в других платформах семейства Arduino, например ESP8266, ESP32.
Макросы и типы #
PGM_P- синонимconst char *для строк в PGM памятиPGM_VOID_P- синонимconst void *для данных в PGM памятиPROGMEM- синоним атрибута__ATTR_PROGMEM__для помещения в PGMPSTR(const char* s)- поместить строку в PGM
Чтение #
pgm_read_byte(addr)- прочитать 1 байт из PGM по адресуaddrpgm_read_word(addr)- прочитать 2 байта из PGM по адресуaddrpgm_read_dword(addr)- прочитать 4 байта из PGM по адресуaddrpgm_read_float(addr)- прочитать float из PGM по адресуaddrpgm_read_ptr(addr)- прочитать указатель из PGM по адресуaddr
Байты, массивы #
Аналоги функций для работы с памятью для PROGMEM, здесь PGM_VOID_P - указатель на данные в PGM памяти:
memcpy_P #
void* memcpy_P(void* dest, PGM_VOID_P src, size_t n)
memccpy - копировать
n байт из src в dest до значения valmemccpy_P #
void* memccpy_P(void* dest, PGM_VOID_P src, int val, size_t len)
memccpy - копировать
n байт из src в dest до значения valmemcmp_P #
int memcmp_P(const void* s1, PGM_VOID_P s2, size_t len)
memcmp - сравнить
s1 и s2 на длине lenmemchr_P #
PGM_VOID_P memchr_P(PGM_VOID_P s, int val, size_t len)
memchr - искать
val в области s длиной len с началаmemrchr_P #
PGM_VOID_P memrchr_P(PGM_VOID_P s, int val, size_t len)
memrchr - искать
val в области s длиной len с концаmemmem_P #
void* memmem_P(const void* s1, size_t len1, PGM_VOID_P s2, size_t len2)
memmem - сравнить
s1 длиной len1 с s2 длиной len2Строки #
Аналоги функций для работы со строками для PROGMEM, здесь PGM_P - указатель на строку в PGM памяти:
strlen_P #
size_t strlen_P(PGM_P s)
strlen - длина строки
strnlen_P #
size_t strnlen_P(PGM_P src, size_t len)
strnlen - длина строки, не более
lenstrcpy_P #
char* strcpy_P(char* dest, PGM_P src)
strcpy - копировать PGM строку из
src в dest буферstrncpy_P #
char* strncpy_P(char* dest, PGM_P src, size_t n)
strncpy - копировать PGM строку из
src в dest буферstrlcpy_P #
size_t strlcpy_P(char* dst, PGM_P src, size_t size)
strlcpy - копировать PGM строку из
src в dest буфер размером sizestrcat_P #
char* strcat_P(char* dest, PGM_P src)
strcat - прибавить строку
src к буферу deststrncat_P #
char* strncat_P(char* dest, PGM_P src, size_t len)
strncat - прибавить строку
src к буферу deststrlcat_P #
size_t strlcat_P(char* dst, PGM_P src, size_t size)
strlcat - прибавить строку
src к буферу dest размером sizestrcmp_P #
int strcmp_P(const char* s1, PGM_P s2)
strcmp - сравнить строки
strncmp_P #
int strncmp_P(const char* s1, PGM_P s2, size_t n)
strncmp - сравнить первые
n символов строкstrcasecmp_P #
int strcasecmp_P(const char* s1, PGM_P s2)
strcasecmp - сравнить строки без учёта регистра букв
strncasecmp_P #
int strncasecmp_P(const char* s1, PGM_P s2, size_t n)
strncasecmp - сравнить первые
n символов строк без учёта регистра буквstrchr_P #
PGM_P strchr_P(PGM_P s, int val)
strchr - найти символ в строке с начала
strrchr_P #
PGM_P strrchr_P(PGM_P s, int val)
strrchr - найти символ в строке с конца
strstr_P #
PGM_P strstr_P(const char* s1, PGM_P s2)
strstr - найти подстроку
strcasestr_P #
PGM_P strcasestr_P(const char* s1, PGM_P s2)
strcasestr - найти подстроку без учёта регистра букв
strspn_P #
size_t strspn_P(const char* s, PGM_P accept)
strspn - выделить начало строки, состоящее из символов
acceptstrcspn_P #
size_t strcspn_P(const char* s, PGM_P reject)
strcspn - выделить начало строки до любого из символов
rejectstrpbrk_P #
PGM_P strpbrk_P(const char* s, PGM_P accept)
strpbrk - выделить начало строки до любого из символов
acceptstrtok_P #
char* strtok_P(char* s, PGM_P delim)
strtok - токенизация
strtok_rP #
char* strtok_rP(char* string, PGM_P delim, char** last)
strtok_r - токенизация