---
name: "pgmspace.h"
section: "3avr"
platform: "linux"
package: "avr-libc"
version: "1:2.2.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/pgmspace.h"
---

# pgmspace.h(3avr)

## NAME

pgmspace.h

## SYNOPSIS

### Macros

\#define **PROGMEM\_FAR**   \_\_attribute\_\_((\_\_section\_\_('.progmemx.data')))\
 \#define **PROGMEM**   \_\_attribute\_\_((\_\_progmem\_\_))\
 \#define **PSTR**(str)   ({ static const **PROGMEM** char c\[\] = (str); &c\[0\]; })\
 \#define **PSTR\_FAR**(str)   ({ static const **PROGMEM\_FAR** char c\[\] = (str); **pgm\_get\_far\_address**(c\[0\]); })\
 \#define **pgm\_read\_byte\_near**(\_\_addr)   \_\_LPM ((**uint16\_t**)(\_\_addr))\
 \#define **pgm\_read\_word\_near**(\_\_addr)   \_\_LPM\_word ((**uint16\_t**)(\_\_addr))\
 \#define **pgm\_read\_dword\_near**(\_\_addr)       \_\_LPM\_dword ((**uint16\_t**)(\_\_addr))\
 \#define **pgm\_read\_qword\_near**(\_\_addr)   \_\_LPM\_qword ((**uint16\_t**)(\_\_addr))\
 \#define **pgm\_read\_float\_near**(addr)   pgm\_read\_float (addr)\
 \#define **pgm\_read\_ptr\_near**(\_\_addr)       ((void\*) \_\_LPM\_word ((**uint16\_t**)(\_\_addr)))\
 \#define **pgm\_read\_byte\_far**(\_\_addr)   \_\_ELPM (\_\_addr)\
 \#define **pgm\_read\_word\_far**(\_\_addr)   \_\_ELPM\_word (\_\_addr)\
 \#define **pgm\_read\_dword\_far**(\_\_addr)   \_\_ELPM\_dword (\_\_addr)\
 \#define **pgm\_read\_qword\_far**(\_\_addr)   \_\_ELPM\_qword (\_\_addr)\
 \#define **pgm\_read\_ptr\_far**(\_\_addr)   ((void\*) \_\_ELPM\_word (\_\_addr))\
 \#define **pgm\_read\_byte**(\_\_addr)   **pgm\_read\_byte\_near**(\_\_addr)\
 \#define **pgm\_read\_word**(\_\_addr)   **pgm\_read\_word\_near**(\_\_addr)\
 \#define **pgm\_read\_dword**(\_\_addr)   **pgm\_read\_dword\_near**(\_\_addr)\
 \#define **pgm\_read\_qword**(\_\_addr)   **pgm\_read\_qword\_near**(\_\_addr)\
 \#define **pgm\_read\_ptr**(\_\_addr)   **pgm\_read\_ptr\_near**(\_\_addr)\
 \#define **pgm\_get\_far\_address**(var)\

### Functions

static char **pgm\_read\_char** (const char \*\_\_addr)\
 static unsigned char **pgm\_read\_unsigned\_char** (const unsigned char \*\_\_addr)\
 static signed char **pgm\_read\_signed\_char** (const signed char \*\_\_addr)\
 static **uint8\_t** **pgm\_read\_u8** (const **uint8\_t** \*\_\_addr)\
 static **int8\_t** **pgm\_read\_i8** (const **int8\_t** \*\_\_addr)\
 static short **pgm\_read\_short** (const short \*\_\_addr)\
 static unsigned short **pgm\_read\_unsigned\_short** (const unsigned short \*\_\_addr)\
 static **uint16\_t** **pgm\_read\_u16** (const **uint16\_t** \*\_\_addr)\
 static **int16\_t** **pgm\_read\_i16** (const **int16\_t** \*\_\_addr)\
 static int **pgm\_read\_int** (const int \*\_\_addr)\
 static signed **pgm\_read\_signed** (const signed \*\_\_addr)\
 static unsigned **pgm\_read\_unsigned** (const unsigned \*\_\_addr)\
 static signed int **pgm\_read\_signed\_int** (const signed int \*\_\_addr)\
 static unsigned int **pgm\_read\_unsigned\_int** (const unsigned int \*\_\_addr)\
 static \_\_int24 **pgm\_read\_i24** (const \_\_int24 \*\_\_addr)\
 static \_\_uint24 **pgm\_read\_u24** (const \_\_uint24 \*\_\_addr)\
 static **uint32\_t** **pgm\_read\_u32** (const **uint32\_t** \*\_\_addr)\
 static **int32\_t** **pgm\_read\_i32** (const **int32\_t** \*\_\_addr)\
 static long **pgm\_read\_long** (const long \*\_\_addr)\
 static unsigned long **pgm\_read\_unsigned\_long** (const unsigned long \*\_\_addr)\
 static long long **pgm\_read\_long\_long** (const long long \*\_\_addr)\
 static unsigned long long **pgm\_read\_unsigned\_long\_long** (const unsigned long long \*\_\_addr)\
 static **uint64\_t** **pgm\_read\_u64** (const **uint64\_t** \*\_\_addr)\
 static **int64\_t** **pgm\_read\_i64** (const **int64\_t** \*\_\_addr)\
 static float **pgm\_read\_float** (const float \*\_\_addr)\
 static double **pgm\_read\_double** (const double \*\_\_addr)\
 static long double **pgm\_read\_long\_double** (const long double \*\_\_addr)\
 static char **pgm\_read\_char\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned char **pgm\_read\_unsigned\_char\_far** (**uint\_farptr\_t** \_\_addr)\
 static signed char **pgm\_read\_signed\_char\_far** (**uint\_farptr\_t** \_\_addr)\
 static **uint8\_t** **pgm\_read\_u8\_far** (**uint\_farptr\_t** \_\_addr)\
 static **int8\_t** **pgm\_read\_i8\_far** (**uint\_farptr\_t** \_\_addr)\
 static short **pgm\_read\_short\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned short **pgm\_read\_unsigned\_short\_far** (**uint\_farptr\_t** \_\_addr)\
 static **uint16\_t** **pgm\_read\_u16\_far** (**uint\_farptr\_t** \_\_addr)\
 static **int16\_t** **pgm\_read\_i16\_far** (**uint\_farptr\_t** \_\_addr)\
 static int **pgm\_read\_int\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned **pgm\_read\_unsigned\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned int **pgm\_read\_unsigned\_int\_far** (**uint\_farptr\_t** \_\_addr)\
 static signed **pgm\_read\_signed\_far** (**uint\_farptr\_t** \_\_addr)\
 static signed int **pgm\_read\_signed\_int\_far** (**uint\_farptr\_t** \_\_addr)\
 static long **pgm\_read\_long\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned long **pgm\_read\_unsigned\_long\_far** (**uint\_farptr\_t** \_\_addr)\
 static \_\_int24 **pgm\_read\_i24\_far** (**uint\_farptr\_t** \_\_addr)\
 static \_\_uint24 **pgm\_read\_u24\_far** (**uint\_farptr\_t** \_\_addr)\
 static **uint32\_t** **pgm\_read\_u32\_far** (**uint\_farptr\_t** \_\_addr)\
 static **int32\_t** **pgm\_read\_i32\_far** (**uint\_farptr\_t** \_\_addr)\
 static long long **pgm\_read\_long\_long\_far** (**uint\_farptr\_t** \_\_addr)\
 static unsigned long long **pgm\_read\_unsigned\_long\_long\_far** (**uint\_farptr\_t** \_\_addr)\
 static **uint64\_t** **pgm\_read\_u64\_far** (**uint\_farptr\_t** \_\_addr)\
 static **int64\_t** **pgm\_read\_i64\_far** (**uint\_farptr\_t** \_\_addr)\
 static float **pgm\_read\_float\_far** (**uint\_farptr\_t** \_\_addr)\
 static double **pgm\_read\_double\_far** (**uint\_farptr\_t** \_\_addr)\
 static long double **pgm\_read\_long\_double\_far** (**uint\_farptr\_t** \_\_addr)\
 const void \* **memchr\_P** (const void \*, int \_\_val, size\_t \_\_len)\
 int **memcmp\_P** (const void \*, const void \*, size\_t)\
 void \* **memccpy\_P** (void \*, const void \*, int \_\_val, size\_t)\
 void \* **memcpy\_P** (void \*, const void \*, size\_t)\
 void \* **memmem\_P** (const void \*, size\_t, const void \*, size\_t)\
 const void \* **memrchr\_P** (const void \*, int \_\_val, size\_t \_\_len)\
 char \* **strcat\_P** (char \*, const char \*)\
 const char \* **strchr\_P** (const char \*, int \_\_val)\
 const char \* **strchrnul\_P** (const char \*, int \_\_val)\
 int **strcmp\_P** (const char \*, const char \*)\
 char \* **strcpy\_P** (char \*, const char \*)\
 int **strcasecmp\_P** (const char \*, const char \*)\
 char \* **strcasestr\_P** (const char \*, const char \*)\
 size\_t **strcspn\_P** (const char \*\_\_s, const char \*\_\_reject)\
 size\_t **strlcat\_P** (char \*, const char \*, size\_t)\
 size\_t **strlcpy\_P** (char \*, const char \*, size\_t)\
 size\_t **strnlen\_P** (const char \*, size\_t)\
 int **strncmp\_P** (const char \*, const char \*, size\_t)\
 int **strncasecmp\_P** (const char \*, const char \*, size\_t)\
 char \* **strncat\_P** (char \*, const char \*, size\_t)\
 char \* **strncpy\_P** (char \*, const char \*, size\_t)\
 char \* **strpbrk\_P** (const char \*\_\_s, const char \*\_\_accept)\
 const char \* **strrchr\_P** (const char \*, int \_\_val)\
 char \* **strsep\_P** (char \*\*\_\_sp, const char \*\_\_delim)\
 size\_t **strspn\_P** (const char \*\_\_s, const char \*\_\_accept)\
 char \* **strstr\_P** (const char \*, const char \*)\
 char \* **strtok\_P** (char \*\_\_s, const char \*\_\_delim)\
 char \* **strtok\_rP** (char \*\_\_s, const char \*\_\_delim, char \*\*\_\_last)\
 size\_t **strlen\_PF** (**uint\_farptr\_t** src)\
 size\_t **strnlen\_PF** (**uint\_farptr\_t** src, size\_t len)\
 void \* **memcpy\_PF** (void \*dest, **uint\_farptr\_t** src, size\_t len)\
 char \* **strcpy\_PF** (char \*dest, **uint\_farptr\_t** src)\
 char \* **strncpy\_PF** (char \*dest, **uint\_farptr\_t** src, size\_t len)\
 char \* **strcat\_PF** (char \*dest, **uint\_farptr\_t** src)\
 size\_t **strlcat\_PF** (char \*dst, **uint\_farptr\_t** src, size\_t siz)\
 char \* **strncat\_PF** (char \*dest, **uint\_farptr\_t** src, size\_t len)\
 int **strcmp\_PF** (const char \*s1, **uint\_farptr\_t** s2)\
 int **strncmp\_PF** (const char \*s1, **uint\_farptr\_t** s2, size\_t n)\
 int **strcasecmp\_PF** (const char \*s1, **uint\_farptr\_t** s2)\
 int **strncasecmp\_PF** (const char \*s1, **uint\_farptr\_t** s2, size\_t n)\
 **uint\_farptr\_t** **strchr\_PF** (**uint\_farptr\_t**, int \_\_val)\
 char \* **strstr\_PF** (const char \*s1, **uint\_farptr\_t** s2)\
 size\_t **strlcpy\_PF** (char \*dst, **uint\_farptr\_t** src, size\_t siz)\
 int **memcmp\_PF** (const void \*, **uint\_farptr\_t**, size\_t)\
 static size\_t **strlen\_P** (const char \*s)\
 template\<typename T \> T **pgm\_read\< T \>** (const T \*addr)\
 template\<typename T \> T **pgm\_read\_far\< T \>** (**uint\_farptr\_t** addr)\

## Author

Generated automatically by Doxygen for AVR-LibC from the source code.
