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

github.com/AlexGyver/Arduino_Ambilight.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Библиотеки/FastLED-master/fastled_progmem.h')
-rw-r--r--Библиотеки/FastLED-master/fastled_progmem.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/Библиотеки/FastLED-master/fastled_progmem.h b/Библиотеки/FastLED-master/fastled_progmem.h
new file mode 100644
index 0000000..cafb536
--- /dev/null
+++ b/Библиотеки/FastLED-master/fastled_progmem.h
@@ -0,0 +1,81 @@
+#ifndef __INC_FL_PROGMEM_H
+#define __INC_FL_PROGMEM_H
+
+#include "FastLED.h"
+
+///@file fastled_progmem.h
+/// wrapper definitions to allow seamless use of PROGMEM in environmens that have it
+
+FASTLED_NAMESPACE_BEGIN
+
+// Compatibility layer for devices that do or don't
+// have "PROGMEM" and the associated pgm_ accessors.
+//
+// If a platform supports PROGMEM, it should define
+// "FASTLED_USE_PROGMEM" as 1, otherwise FastLED will
+// fall back to NOT using PROGMEM.
+//
+// Whether or not pgmspace.h is #included is separately
+// controllable by FASTLED_INCLUDE_PGMSPACE, if needed.
+
+
+// If FASTLED_USE_PROGMEM is 1, we'll map FL_PROGMEM
+// and the FL_PGM_* accessors to the Arduino equivalents.
+#if FASTLED_USE_PROGMEM == 1
+#ifndef FASTLED_INCLUDE_PGMSPACE
+#define FASTLED_INCLUDE_PGMSPACE 1
+#endif
+
+#if FASTLED_INCLUDE_PGMSPACE == 1
+#include <avr/pgmspace.h>
+#endif
+
+#define FL_PROGMEM PROGMEM
+
+// Note: only the 'near' memory wrappers are provided.
+// If you're using 'far' memory, you already have
+// portability issues to work through, but you could
+// add more support here if needed.
+#define FL_PGM_READ_BYTE_NEAR(x) (pgm_read_byte_near(x))
+#define FL_PGM_READ_WORD_NEAR(x) (pgm_read_word_near(x))
+#define FL_PGM_READ_DWORD_NEAR(x) (pgm_read_dword_near(x))
+
+// Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734
+#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6))
+#ifdef FASTLED_AVR
+#ifdef PROGMEM
+#undef PROGMEM
+#define PROGMEM __attribute__((section(".progmem.data")))
+#endif
+#endif
+#endif
+
+#else
+// If FASTLED_USE_PROGMEM is 0 or undefined,
+// we'll use regular memory (RAM) access.
+
+//empty PROGMEM simulation
+#define FL_PROGMEM
+#define FL_PGM_READ_BYTE_NEAR(x) (*((const uint8_t*)(x)))
+#define FL_PGM_READ_WORD_NEAR(x) (*((const uint16_t*)(x)))
+#define FL_PGM_READ_DWORD_NEAR(x) (*((const uint32_t*)(x)))
+
+#endif
+
+
+// On some platforms, most notably ARM M0, unaligned access
+// to 'PROGMEM' for multibyte values (eg read dword) is
+// not allowed and causes a crash. This macro can help
+// force 4-byte alignment as needed. The FastLED gradient
+// palette code uses 'read dword', and now uses this macro
+// to make sure that gradient palettes are 4-byte aligned.
+#ifdef FASTLED_ARM
+#define FL_ALIGN_PROGMEM __attribute__ ((aligned (4)))
+#else
+#define FL_ALIGN_PROGMEM
+#endif
+
+
+FASTLED_NAMESPACE_END
+
+#endif