Platformio: further refactoring and bug fixing

platformio:
- min and max as postfix instead of prefix
- add common_mm entry for MM build_flags and lib_deps
- add esp32_4MB_V4_max_base entry for V4

const.h and FX_(2D)fcn.cpp: add IRAM_ATTR_YN to switch off if not esp32 (esp8266 not enough iram for this)

json.cpp: start stop compatibility only if 2D not disabled
This commit is contained in:
Ewoud
2022-11-01 18:18:03 +01:00
parent 0474be3069
commit 46ee25b46b
5 changed files with 138 additions and 117 deletions

View File

@@ -41,16 +41,15 @@
; MoonModules entries
; ===================
default_envs = min_esp32_4MB, max_esp32_4MB, wemos_shield_esp32_4MB, max_esp32_16MB, wemos_shield_esp32_16MB, min_esp32_4MB_PSRAM ; , min_esp32S3_8MB, min_esp8266_4MB
; default_envs = min_esp32_4MB_PSRAM, min_esp32S3_8MB ;min_esp8266_4MB
; default_envs = min_esp32_4MB
; default_envs = max_esp32_4MB
; default_envs = wemos_shield_esp32_4MB
; default_envs = max_esp32_16MB
; default_envs = wemos_shield_esp32_16MB
; default_envs = min_esp32_4MB_PSRAM
; default_envs = min_esp32S3_8MB ;Error: BoardConfig: Board is not defined
; default_envs = min_esp8266_4MB ;error: section `.text1' will not fit in region `iram1_0_seg'
; default_envs = esp32_4MB_min, esp32_4MB_max, esp32_16MB_max, esp8266_4MB_min, esp32_4MB_PSRAM_max, esp32S3_8MB_max, wemos_shield_esp32_4MB_max, wemos_shield_esp32_16MB_max
; default_envs = esp32_4MB_min
default_envs = esp32_4MB_max ; recommended
; default_envs = esp32_16MB_max
; default_envs = esp8266_4MB_min
; default_envs = esp32_4MB_PSRAM_max
; default_envs = esp32S3_8MB_max
; default_envs = wemos_shield_esp32_4MB_max
; default_envs = wemos_shield_esp32_16MB_max
src_dir = ./wled00
@@ -539,13 +538,9 @@ lib_deps = ${esp32s2.lib_deps}
# MoonModules configs
# ------------------------------------------------------------------------------
[env:min_esp32_4MB_base]
board = esp32dev
platform = ${esp32.platform}
upload_speed = 460800 ; or 921600
platform_packages = ${esp32.platform_packages}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32}
; shared build flags and lib deps for minimum and maximum config
[common_mm]
build_flags_min =
-Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings
-Wno-attributes -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ;disables some stupid warnings
; -Wno-misleading-indentation ; warning: unrecognized command line option '-Wno-misleading-indentation'
@@ -555,24 +550,15 @@ build_flags = ${common.build_flags_esp32}
-D WLED_USE_MY_CONFIG
-D USERMOD_AUDIOREACTIVE
-D UM_AUDIOREACTIVE_USE_NEW_FFT ; use latest (upstream) FFTLib, instead of older library midified by blazoncek. Slightly faster, more accurate, needs 2KB RAM extra
-D USERMOD_CUSTOMEFFECTS
-D USERMOD_CUSTOMEFFECTS ; WLEDSR usermod
; -D WLED_DEBUG ; lots of generic debug messages
; -D SR_DEBUG ; some extra debug messages from audioreactive
lib_deps = ${esp32.lib_deps}
lib_deps_min =
https://github.com/kosme/arduinoFFT#develop @ 1.9.2 ; used for USERMOD_AUDIOREACTIVE
; monitor_filters = esp32_exception_decoder ; used to show crash details
board_build.partitions = ${esp32.default_partitions}
board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz)
board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o)
[env:min_esp32_4MB]
extends = env:min_esp32_4MB_base
build_flags = ${env:min_esp32_4MB_base.build_flags}
-D WLED_RELEASE_NAME=min_esp32_4MB ; This will be included in the firmware.bin filename
[env:max_esp32_4MB_base]
extends = env:min_esp32_4MB_base
build_flags = ${env:min_esp32_4MB_base.build_flags}
build_flags_max =
-D WLED_MAX_USERMODS=9 ; default only 4-6
-D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4
-D WLED_USE_MY_CONFIG ; include custom my_config.h
@@ -581,43 +567,100 @@ build_flags = ${env:min_esp32_4MB_base.build_flags}
-D USERMOD_FOUR_LINE_DISPLAY
-D USERMOD_ROTARY_ENCODER_UI
-D USERMOD_AUTO_SAVE
; -D USERMOD_CUSTOMEFFECTS ; WLEDSR usermod
-D USERMOD_WEATHER ; WLEDSR usermod
-D USERMOD_MPU6050_IMU ; gyro/accelero for USERMOD_GAMES (ONLY WORKS IF USERMOD_FOUR_LINE_DISPLAY NOT INCLUDED - I2C SHARING BUG)
-D USERMOD_GAMES ; WLEDSR usermod
lib_deps = ${env:min_esp32_4MB_base.lib_deps}
lib_deps_max =
OneWire@~2.3.5 ; used for USERMOD_FOUR_LINE_DISPLAY and USERMOD_DALLASTEMPERATURE
olikraus/U8g2 @ ^2.28.8 ; used for USERMOD_FOUR_LINE_DISPLAY
ElectronicCats/MPU6050 @ 0.6.0 ; used for USERMOD_MPU6050_IMU
board_build.partitions = ${env:min_esp32_4MB_base.board_build.partitions}
; end of common
; base entries (without WLED_RELEASE_NAME)
; esp32_4MB_min_base: basis for min entries and for max_base
[env:esp32_4MB_min_base]
board = esp32dev
platform = ${esp32.platform}
upload_speed = 460800 ; or 921600
platform_packages = ${esp32.platform_packages}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} ${common_mm.build_flags_min}
lib_deps = ${esp32.lib_deps} ${common_mm.lib_deps_min}
board_build.partitions = ${esp32.default_partitions}
board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz)
board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o)
;esp32_4MB_max_base: basis for max entries, uses esp32_4MB_min_base, build_flags_max and lib_deps_max
[env:esp32_4MB_max_base]
extends = env:esp32_4MB_min_base
build_flags = ${env:esp32_4MB_min_base.build_flags} ${common_mm.build_flags_max}
lib_deps = ${env:esp32_4MB_min_base.lib_deps} ${common_mm.lib_deps_max}
board_build.partitions = ${env:esp32_4MB_min_base.board_build.partitions}
; board_build.partitions = tools/WLED_ESP32-wrover_4MB.csv
[env:max_esp32_4MB]
extends = env:max_esp32_4MB_base
build_flags = ${env:max_esp32_4MB_base.build_flags}
-D WLED_RELEASE_NAME=max_esp32_4MB ; This will be included in the firmware.bin filename
;esp32_4MB_V4_max_base: basis for V4 entries, uses build_flags_min, build_flags_max, lib_deps_min and lib_deps_max
[env:esp32_4MB_V4_max_base]
board = esp32dev
upload_speed = 460800 ; or 921600
platform = ${esp32.platformV4}
platform_packages = ${esp32.platformV4_packages}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags} ${esp32.build_flagsV4} ${common_mm.build_flags_min} ${common_mm.build_flags_max}
-Wno-misleading-indentation
lib_deps = ${esp32.lib_depsV4} ${common_mm.lib_deps_min} ${common_mm.lib_deps_max}
board_build.partitions = ${esp32.default_partitions}
board_build.f_flash = 80000000L ; use full 80MHz speed for flash (default = 40Mhz)
board_build.flash_mode = dio ; (dio = dual i/o; more compatible than qio = quad i/o)
[env:max_esp32_16MB]
extends = env:max_esp32_4MB_base
; end of base entries
; bin entries (with WLED_RELEASE_NAME)
; esp32_4MB_min: bin entry, uses esp32_4MB_min_base
[env:esp32_4MB_min]
extends = env:esp32_4MB_min_base
build_flags = ${env:esp32_4MB_min_base.build_flags}
-D WLED_RELEASE_NAME=esp32_4MB_min ; This will be included in the firmware.bin filename
; RAM: [== ] 24.1% (used 78900 bytes from 327680 bytes)
; Flash: [======== ] 83.7% (used 1315729 bytes from 1572864 bytes)
; esp32_4MB_max: bin entry, uses esp32_4MB_max_base
[env:esp32_4MB_max]
extends = env:esp32_4MB_max_base
build_flags = ${env:esp32_4MB_max_base.build_flags}
-D WLED_RELEASE_NAME=esp32_4MB_max ; This will be included in the firmware.bin filename
; RAM: [== ] 24.4% (used 79812 bytes from 327680 bytes)
; Flash: [========= ] 88.6% (used 1393397 bytes from 1572864 bytes)
; esp32_16MB_max: bin entry, uses esp32_4MB_max_base and adds 16MB settings
[env:esp32_16MB_max]
extends = env:esp32_4MB_max_base
board = esp32_twilord ; "TwilightLord" ESP32 with 16MB Flash
board_build.partitions = tools/WLED_ESP32_16MB.csv ; for esp32_twilord with 16MB flash
build_flags = ${env:max_esp32_4MB_base.build_flags}
-D WLED_RELEASE_NAME=max_esp32_16MB ; This will be included in the firmware.bin filename
build_flags = ${env:esp32_4MB_max_base.build_flags}
-D WLED_RELEASE_NAME=esp32_16MB_max ; This will be included in the firmware.bin filename
; RAM: [== ] 24.4% (used 79812 bytes from 327680 bytes)
; Flash: [======= ] 66.4% (used 1393397 bytes from 2097152 bytes)
[env:min_esp8266_4MB]
; esp8266_4MB_min: bin entry for 8266, with 2D (WIP)
[env:esp8266_4MB_min]
extends = env:d1_mini
upload_speed = 460800 ;115200
build_flags = ${common.build_flags_esp8266}
-D WLED_RELEASE_NAME=min_esp8266_4MB ; This will be included in the firmware.bin filename
-D WLED_RELEASE_NAME=esp8266_4MB_min ; This will be included in the firmware.bin filename
; -D WLED_DEBUG
-D WLED_DISABLE_ALEXA
-D WLED_DISABLE_BLYNK
-D WLED_DISABLE_HUESYNC
; -D WLED_DISABLE_2D
; -D WLED_DISABLE_AUDIO
; -D USERMOD_AUDIOREACTIVE
-UWLED_USE_MY_CONFIG
; monitor_filters = esp8266_exception_decoder
; RAM: [====== ] 58.7% (used 48056 bytes from 81920 bytes)
; Flash: [======== ] 75.7% (used 790428 bytes from 1044464 bytes)
# ------------------------------------------------------------------------------
# MoonModules configs for IDF V4.4.x
@@ -627,57 +670,29 @@ build_flags = ${common.build_flags_esp8266}
;; Warning: the build-in LittleFS seems to be "slightly different" from Lorol LittleFS.
;; When upgrading to the new framework, it might be necessary to first do a chip erase (make sure you have a backup of cfg.json and presets.json)
;; also SpiffsEditor (Async Webserver) has known problems in IDF4.4.x
[env:min_esp32_4MB_PSRAM]
extends = env:min_esp32_4MB_base
; esp32_4MB_PSRAM_max: bin entry, uses esp32_4MB_V4_max_base and adds specific settings
[env:esp32_4MB_PSRAM_max]
extends = env:esp32_4MB_V4_max_base
board = lolin_d32_pro
;board = esp32cam
; platform = ${esp32.platform}
; platform_packages = ${esp32.platform_packages}
platform = ${esp32.platformV4}
platform_packages = ${esp32.platformV4_packages}
; upload_speed = 460800 ; or 921600
; build_unflags = ${common.build_unflags}
;build_flags = ${common.build_flags} ${esp32.build_flags}
build_flags = ${common.build_flags} ${esp32.build_flagsV4}
-D WLED_RELEASE_NAME=min_esp32_4MB_PSRAM
build_flags = ${env:esp32_4MB_V4_max_base.build_flags}
-D WLED_RELEASE_NAME=esp32_4MB_PSRAM_max
-D WLED_WATCHDOG_TIMEOUT=0 #-D WLED_DISABLE_BLYNK #-D WLED_DISABLE_BROWNOUT_DET
-D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup
; -Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings
; -Wno-attributes -Wno-misleading-indentation -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ; disables some stupid warnings
-D WLED_USE_PSRAM
; -D ABL_MILLIAMPS_DEFAULT=1500 ; 850 not enough for 1024 leds
; -D WLED_USE_MY_CONFIG
; -D USERMOD_CUSTOMEFFECTS
; -D USERMOD_AUDIOREACTIVE
; -D UM_AUDIOREACTIVE_USE_NEW_FFT
; -D WLED_DEBUG
; -D SR_DEBUG
; RAM: [== ] 24.8% (used 81424 bytes from 327680 bytes)
; Flash: [==========] 99.8% (used 1570457 bytes from 1572864 bytes)
; 99.8% !!!!
;lib_deps = ${esp32.lib_deps}
lib_deps = ${esp32.lib_depsV4}
; https://github.com/kosme/arduinoFFT#develop @ 1.9.2
; monitor_filters = esp32_exception_decoder
; board_build.partitions = ${esp32.default_partitions}
; board_build.f_flash = 80000000L
; board_build.flash_mode = dio
[env:min_esp32S3_8MB]
extends = env:min_esp32_4MB_base
; esp32S3_8MB_max: bin entry, uses esp32_4MB_V4_max_base and adds specific settings. Override of lib_deps using lib_deps_min and lib_deps_max
[env:esp32S3_8MB_max]
extends = env:esp32_4MB_V4_max_base
board = esp32-s3-devkitc-1
platform = ${esp32.platformV4}
platform_packages = ${esp32.platformV4_packages}
; upload_speed = 460800 ; or 921600
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags} ${esp32s3.build_flags}
-D WLED_RELEASE_NAME=min_esp32S3_8MB
#-D WLED_DISABLE_BLYNK #-D WLED_DISABLE_BROWNOUT_DET
build_flags = ${env:esp32_4MB_V4_max_base.build_flags}
-D WLED_RELEASE_NAME=esp32S3_8MB_max
-D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=0 -D ARDUINO_USB_MSC_ON_BOOT=0 -D ARDUINO_USB_DFU_ON_BOOT=0
; -Wall -Wformat -Woverflow -Wuninitialized -Winit-self -Warray-bounds ; enables more warnings
; -Wno-attributes -Wno-misleading-indentation -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations ; disables some stupid warnings
-D WLED_WATCHDOG_TIMEOUT=0
; -D ABL_MILLIAMPS_DEFAULT=1500 ; 850 not enough for 1024 leds
-D LEDPIN=4
-D STATUSLED=39
-D BTNPIN=-1
@@ -685,36 +700,26 @@ build_flags = ${common.build_flags} ${esp32s3.build_flags}
-D IRPIN=-1
-D HW_PIN_SDA=40
-D HW_PIN_SCL=41
; -D WLED_USE_MY_CONFIG
; -D USERMOD_CUSTOMEFFECTS
;; for audioreactive usermod
; -D USERMOD_AUDIOREACTIVE
; -D UM_AUDIOREACTIVE_USE_NEW_FFT
-D AUDIOPIN=-1
-D I2S_SDPIN=16
-D I2S_CKPIN=17
-D I2S_WSPIN=47
-D ES7243_SDAPIN=8
-D ES7243_SCLPIN=18
lib_deps = ${esp32s3.lib_deps}
;; for audioreactive usermod
; https://github.com/kosme/arduinoFFT#develop @ 1.9.2
lib_deps = ${esp32s3.lib_deps} ${common_mm.lib_deps_min} ${common_mm.lib_deps_max}
board_build.partitions = tools/WLED_ESP32_8MB.csv
; board_build.flash_mode = dio
; board_build.flash_mode = qio
; board_build.f_flash = 80000000L
; board_build.f_flash = 120000000L
; monitor_filters = esp32_exception_decoder
board_build.flash_mode = qio
; RAM: [== ] 24.7% (used 80984 bytes from 327680 bytes)
; Flash: [======= ] 69.0% (used 1447873 bytes from 2097152 bytes)
# ------------------------------------------------------------------------------
# custom board configurations
# ------------------------------------------------------------------------------
[env:wemos_shield_esp32_4MB_base]
extends = env:max_esp32_4MB_base
build_flags = ${env:max_esp32_4MB_base.build_flags}
;wemos_shield_esp32_4MB_max_base: base entry, uses esp32_4MB_max_base
[env:wemos_shield_esp32_4MB_max_base]
extends = env:esp32_4MB_max_base
build_flags = ${env:esp32_4MB_max_base.build_flags}
-D LEDPIN=16
-D RLYPIN=19
-D BTNPIN=17
@@ -724,17 +729,23 @@ build_flags = ${env:max_esp32_4MB_base.build_flags}
-D FLD_PIN_SCL=22 -D FLD_PIN_SDA=21
; -D ENCODER_DT_PIN=18 -D ENCODER_CLK_PIN=5 -D ENCODER_SW_PIN=19
[env:wemos_shield_esp32_4MB]
extends = env:wemos_shield_esp32_4MB_base
build_flags = ${env:wemos_shield_esp32_4MB_base.build_flags}
-D WLED_RELEASE_NAME=wemos_shield_esp32_4MB ; This will be included in the firmware.bin filename
;wemos_shield_esp32_4MB_max: bin entry, uses wemos_shield_esp32_4MB_max_base
[env:wemos_shield_esp32_4MB_max]
extends = env:wemos_shield_esp32_4MB_max_base
build_flags = ${env:wemos_shield_esp32_4MB_max_base.build_flags}
-D WLED_RELEASE_NAME=wemos_shield_esp32_4MB_max ; This will be included in the firmware.bin filename
; RAM: [== ] 24.4% (used 79820 bytes from 327680 bytes)
; Flash: [========= ] 88.6% (used 1393421 bytes from 1572864 bytes)
[env:wemos_shield_esp32_16MB]
extends = env:wemos_shield_esp32_4MB_base
;wemos_shield_esp32_16MB_max: bin entry, uses wemos_shield_esp32_4MB_max_base and adds 16MB settings
[env:wemos_shield_esp32_16MB_max]
extends = env:wemos_shield_esp32_4MB_max_base
board = esp32_twilord ; "TwilightLord" ESP32 with 16MB Flash
board_build.partitions = tools/WLED_ESP32_16MB.csv ; for esp32_twilord with 16MB flash
build_flags = ${env:wemos_shield_esp32_4MB_base.build_flags}
-D WLED_RELEASE_NAME=wemos_shield_esp32_16MB ; This will be included in the firmware.bin filename
build_flags = ${env:wemos_shield_esp32_4MB_max_base.build_flags}
-D WLED_RELEASE_NAME=wemos_shield_esp32_16MB_max ; This will be included in the firmware.bin filename
; RAM: [== ] 24.4% (used 79820 bytes from 327680 bytes)
; Flash: [======= ] 66.4% (used 1393421 bytes from 2097152 bytes)
[env:m5atom]
board = esp32dev

View File

@@ -109,7 +109,7 @@ void WS2812FX::setUpMatrix() {
}
// absolute matrix version of setPixelColor()
void IRAM_ATTR WS2812FX::setPixelColorXY(int x, int y, uint32_t col)
void IRAM_ATTR_YN WS2812FX::setPixelColorXY(int x, int y, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly
{
#ifndef WLED_DISABLE_2D
if (!isMatrix) return; // not a matrix set-up
@@ -141,13 +141,13 @@ uint32_t WS2812FX::getPixelColorXY(uint16_t x, uint16_t y) {
#ifndef WLED_DISABLE_2D
// XY(x,y) - gets pixel index within current segment (often used to reference leds[] array element)
uint16_t IRAM_ATTR Segment::XY(uint16_t x, uint16_t y) {
uint16_t IRAM_ATTR_YN Segment::XY(uint16_t x, uint16_t y) { //WLEDSR: IRAM_ATTR conditionaly
uint16_t width = virtualWidth(); // segment width in logical pixels
uint16_t height = virtualHeight(); // segment height in logical pixels
return (x%width) + (y%height) * width;
}
void IRAM_ATTR Segment::setPixelColorXY(int x, int y, uint32_t col)
void IRAM_ATTR_YN Segment::setPixelColorXY(int x, int y, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly
{
if (!strip.isMatrix) return; // not a matrix set-up
if (x >= virtualWidth() || y >= virtualHeight() || x<0 || y<0) return; // if pixel would fall out of virtual segment just exit

View File

@@ -691,7 +691,7 @@ void xyFromBlock(uint16_t &x,uint16_t &y, uint16_t i, uint16_t vW, uint16_t vH,
}
void IRAM_ATTR Segment::setPixelColor(int i, uint32_t col)
void IRAM_ATTR_YN Segment::setPixelColor(int i, uint32_t col) //WLEDSR: IRAM_ATTR conditionaly
{
int vStrip = i>>16; // hack to allow running on virtual strips (2D segment columns/rows)
i &= 0xFFFF;

View File

@@ -431,4 +431,12 @@
#define HW_PIN_CSSPI SS
#endif
// WLEDSR: IRAM_ATTR for 8266 causes error: section `.text1' will not fit in region `iram1_0_seg'
// error only in MM, not in upstream... tbd: find out why
#ifdef ARDUINO_ARCH_ESP32
#define IRAM_ATTR_YN IRAM_ATTR
#else
#define IRAM_ATTR_YN
#endif
#endif

View File

@@ -35,7 +35,8 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
if (id >= strip.getMaxSegments()) return;
//WLEDSR: add compatibility for SR presets
// Serial.printf("before %d: %s %s %s %s\n", id, elem["start"].as<std::string>().c_str(), elem["stop"].as<std::string>().c_str(), elem["startY"].as<std::string>().c_str(), elem["stopY"].as<std::string>().c_str());
#ifndef WLED_DISABLE_2D
// Serial.printf("before %d: %s %s %s %s\n", id, elem["start"].as<std::string>().c_str(), elem["stop"].as<std::string>().c_str(), elem["startY"].as<std::string>().c_str(), elem["stopY"].as<std::string>().c_str());
if (strip.isMatrix && !elem["start"].isNull() && !elem["stop"].isNull() && elem["startY"].isNull() && elem["stopY"].isNull()) {
uint16_t start1=elem["start"], stop1=elem["stop"];
elem["start"] = start1%strip.matrixWidth;
@@ -44,6 +45,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId)
elem["stopY"]= strip.matrixWidth?((stop1-1) / strip.matrixWidth) + 1:0;
// Serial.printf("after %s %s %s %s\n", elem["start"].as<std::string>().c_str(), elem["stop"].as<std::string>().c_str(), elem["startY"].as<std::string>().c_str(), elem["stopY"].as<std::string>().c_str());
}
#endif
if (!elem["c1x"].isNull()) elem["c1"] = elem["c1x"];
if (!elem["c2x"].isNull()) elem["c2"] = elem["c2x"];
if (!elem["c3x"].isNull()) elem["c3"] = elem["c3x"];