mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-19 06:37:13 +01:00
Port PROGMEM from 2.5.0 (#1374)
* Port PROGMEM from 2.5.0 * Update prototypes.h * Guard for <2.5.0, prettify
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
#include <Arduino.h>
|
||||
#include <ArduinoJson.h>
|
||||
#include <functional>
|
||||
#include <pgmspace.h>
|
||||
#include <core_version.h>
|
||||
|
||||
extern "C" {
|
||||
@@ -19,6 +18,41 @@ uint32_t systemResetReason();
|
||||
uint8_t systemStabilityCounter();
|
||||
void systemStabilityCounter(uint8_t);
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// PROGMEM
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#include <pgmspace.h>
|
||||
|
||||
// ref: https://github.com/esp8266/Arduino/blob/master/tools/sdk/libc/xtensa-lx106-elf/include/sys/pgmspace.h
|
||||
// __STRINGIZE && __STRINGIZE_NX && PROGMEM definitions port
|
||||
|
||||
// Do not replace macros unless running version older than 2.5.0
|
||||
#if defined(ARDUINO_ESP8266_RELEASE_2_3_0) \
|
||||
|| defined(ARDUINO_ESP8266_RELEASE_2_4_0) \
|
||||
|| defined(ARDUINO_ESP8266_RELEASE_2_4_1) \
|
||||
|| defined(ARDUINO_ESP8266_RELEASE_2_4_2)
|
||||
|
||||
// Quoting esp8266/Arduino comments:
|
||||
// "Since __section__ is supposed to be only use for global variables,
|
||||
// there could be conflicts when a static/inlined function has them in the
|
||||
// same file as a non-static PROGMEM object.
|
||||
// Ref: https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Variable-Attributes.html
|
||||
// Place each progmem object into its own named section, avoiding conflicts"
|
||||
|
||||
#define __TO_STR_(A) #A
|
||||
#define __TO_STR(A) __TO_STR_(A)
|
||||
|
||||
#undef PROGMEM
|
||||
#define PROGMEM __attribute__((section( "\".irom.text." __FILE__ "." __TO_STR(__LINE__) "." __TO_STR(__COUNTER__) "\"")))
|
||||
|
||||
// "PSTR() macro modified to start on a 32-bit boundary. This adds on average
|
||||
// 1.5 bytes/string, but in return memcpy_P and strcpy_P will work 4~8x faster"
|
||||
#undef PSTR
|
||||
#define PSTR(s) (__extension__({static const char __c[] __attribute__((__aligned__(4))) PROGMEM = (s); &__c[0];}))
|
||||
|
||||
#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// API
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user