Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Klipper3d/klipper.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/avr/pgm.h')
-rw-r--r--src/avr/pgm.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/avr/pgm.h b/src/avr/pgm.h
new file mode 100644
index 000000000..ba68d8f9c
--- /dev/null
+++ b/src/avr/pgm.h
@@ -0,0 +1,25 @@
+#ifndef __AVR_PGM_H
+#define __AVR_PGM_H
+// This header provides the avr/pgmspace.h definitions for "PROGMEM"
+// on AVR platforms.
+
+#include <avr/pgmspace.h>
+
+#define READP(VAR) ({ \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wint-to-pointer-cast\""); \
+ typeof(VAR) __val = \
+ __builtin_choose_expr(sizeof(VAR) == 1, \
+ (typeof(VAR))pgm_read_byte(&(VAR)), \
+ __builtin_choose_expr(sizeof(VAR) == 2, \
+ (typeof(VAR))pgm_read_word(&(VAR)), \
+ __builtin_choose_expr(sizeof(VAR) == 4, \
+ (typeof(VAR))pgm_read_dword(&(VAR)), \
+ __force_link_error__unknown_type))); \
+ _Pragma("GCC diagnostic pop"); \
+ __val; \
+ })
+
+extern void __force_link_error__unknown_type(void);
+
+#endif // pgm.h