mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Update documentation and arduino debug options (#8837)
* Update documentation Describe how to improve Exception Decoder results. Updated build option details. * Added d-a-v's code. And updated description and debug macro. * Update doc Updated platform.txt - positioned -Os such that it can be overridden by `build.opt`. Add suggestion of using `-Og` which may improve the Decoder's line number correlation with the problem in the source code. Untested adjustments to platformio-build.py * Fixed code formatting * Fixed example Previously `-O3` in the example had no effect. It was overridden by later flags. Reording the `-Os` allowed changing optimization to work. Somehow this triggered a new warning "Stream.h:50:7: warning: 'f.Stream::_startMillis' may be used uninitialized in this function". Replaced `-O3` with `-Og`. * Proposed "Debug port" menu change Preserves a pathway for `build.opt` override. * Update boards.txt.py and docs - WIP * Improve organization of optimization content. Use "Debug Optimization" for menu name. The menu item defines the initial optimization. platform.txt - optimization parameter can be overridden by build.opt. * Add fallback value for build.debug_optim to platform.txt * update text and undo changes to platformio-build.py * tweak text * Added ':orphan:' mark to a06-global-build-options.rst * Update doc. Added link in page index to 'Improving Exception Decoder Results' * Update text to reference PR#8868 improvements for leaf function.
This commit is contained in:
parent
ce9e72014b
commit
d3c102e717
267
boards.txt
267
boards.txt
@ -17,6 +17,7 @@ menu.FlashFreq=Flash Frequency
|
||||
menu.ResetMethod=Reset Method
|
||||
menu.dbg=Debug port
|
||||
menu.lvl=Debug Level
|
||||
menu.optim=Debug Optimization
|
||||
menu.ip=lwIP Variant
|
||||
menu.vt=VTables
|
||||
menu.exception=C++ Exceptions
|
||||
@ -40,6 +41,7 @@ generic.build.mcu=esp8266
|
||||
generic.build.core=esp8266
|
||||
generic.build.variant=generic
|
||||
generic.build.spiffs_pagesize=256
|
||||
generic.build.debug_optim=
|
||||
generic.build.debug_port=
|
||||
generic.build.debug_level=
|
||||
generic.menu.xtal.80=80 MHz
|
||||
@ -397,6 +399,12 @@ generic.menu.dbg.Serial1=Serial1
|
||||
generic.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
generic.menu.lvl.None____=None
|
||||
generic.menu.lvl.None____.build.debug_level=
|
||||
generic.menu.optim.Smallest=None
|
||||
generic.menu.optim.Smallest.build.debug_optim=-Os
|
||||
generic.menu.optim.Lite=Lite
|
||||
generic.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
generic.menu.optim.Full=Optimum
|
||||
generic.menu.optim.Full.build.debug_optim=-Og
|
||||
generic.menu.lvl.SSL=SSL
|
||||
generic.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
generic.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -502,6 +510,7 @@ esp8285.serial.disableRTS=true
|
||||
esp8285.build.mcu=esp8266
|
||||
esp8285.build.core=esp8266
|
||||
esp8285.build.spiffs_pagesize=256
|
||||
esp8285.build.debug_optim=
|
||||
esp8285.build.debug_port=
|
||||
esp8285.build.debug_level=
|
||||
esp8285.menu.xtal.80=80 MHz
|
||||
@ -742,6 +751,12 @@ esp8285.menu.dbg.Serial1=Serial1
|
||||
esp8285.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
esp8285.menu.lvl.None____=None
|
||||
esp8285.menu.lvl.None____.build.debug_level=
|
||||
esp8285.menu.optim.Smallest=None
|
||||
esp8285.menu.optim.Smallest.build.debug_optim=-Os
|
||||
esp8285.menu.optim.Lite=Lite
|
||||
esp8285.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
esp8285.menu.optim.Full=Optimum
|
||||
esp8285.menu.optim.Full.build.debug_optim=-Og
|
||||
esp8285.menu.lvl.SSL=SSL
|
||||
esp8285.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
esp8285.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -848,6 +863,7 @@ gen4iod.serial.disableRTS=true
|
||||
gen4iod.build.mcu=esp8266
|
||||
gen4iod.build.core=esp8266
|
||||
gen4iod.build.spiffs_pagesize=256
|
||||
gen4iod.build.debug_optim=
|
||||
gen4iod.build.debug_port=
|
||||
gen4iod.build.debug_level=
|
||||
gen4iod.menu.xtal.80=80 MHz
|
||||
@ -1010,6 +1026,12 @@ gen4iod.menu.dbg.Serial1=Serial1
|
||||
gen4iod.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
gen4iod.menu.lvl.None____=None
|
||||
gen4iod.menu.lvl.None____.build.debug_level=
|
||||
gen4iod.menu.optim.Smallest=None
|
||||
gen4iod.menu.optim.Smallest.build.debug_optim=-Os
|
||||
gen4iod.menu.optim.Lite=Lite
|
||||
gen4iod.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
gen4iod.menu.optim.Full=Optimum
|
||||
gen4iod.menu.optim.Full.build.debug_optim=-Og
|
||||
gen4iod.menu.lvl.SSL=SSL
|
||||
gen4iod.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
gen4iod.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -1115,6 +1137,7 @@ huzzah.serial.disableRTS=true
|
||||
huzzah.build.mcu=esp8266
|
||||
huzzah.build.core=esp8266
|
||||
huzzah.build.spiffs_pagesize=256
|
||||
huzzah.build.debug_optim=
|
||||
huzzah.build.debug_port=
|
||||
huzzah.build.debug_level=
|
||||
huzzah.menu.xtal.80=80 MHz
|
||||
@ -1222,6 +1245,12 @@ huzzah.menu.dbg.Serial1=Serial1
|
||||
huzzah.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
huzzah.menu.lvl.None____=None
|
||||
huzzah.menu.lvl.None____.build.debug_level=
|
||||
huzzah.menu.optim.Smallest=None
|
||||
huzzah.menu.optim.Smallest.build.debug_optim=-Os
|
||||
huzzah.menu.optim.Lite=Lite
|
||||
huzzah.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
huzzah.menu.optim.Full=Optimum
|
||||
huzzah.menu.optim.Full.build.debug_optim=-Og
|
||||
huzzah.menu.lvl.SSL=SSL
|
||||
huzzah.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
huzzah.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -1327,6 +1356,7 @@ wifi_slot.serial.disableRTS=true
|
||||
wifi_slot.build.mcu=esp8266
|
||||
wifi_slot.build.core=esp8266
|
||||
wifi_slot.build.spiffs_pagesize=256
|
||||
wifi_slot.build.debug_optim=
|
||||
wifi_slot.build.debug_port=
|
||||
wifi_slot.build.debug_level=
|
||||
wifi_slot.menu.xtal.80=80 MHz
|
||||
@ -1528,6 +1558,12 @@ wifi_slot.menu.dbg.Serial1=Serial1
|
||||
wifi_slot.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
wifi_slot.menu.lvl.None____=None
|
||||
wifi_slot.menu.lvl.None____.build.debug_level=
|
||||
wifi_slot.menu.optim.Smallest=None
|
||||
wifi_slot.menu.optim.Smallest.build.debug_optim=-Os
|
||||
wifi_slot.menu.optim.Lite=Lite
|
||||
wifi_slot.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
wifi_slot.menu.optim.Full=Optimum
|
||||
wifi_slot.menu.optim.Full.build.debug_optim=-Og
|
||||
wifi_slot.menu.lvl.SSL=SSL
|
||||
wifi_slot.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
wifi_slot.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -1645,6 +1681,7 @@ arduino-esp8266.build.mcu=esp8266
|
||||
arduino-esp8266.build.core=esp8266
|
||||
arduino-esp8266.build.variant=generic
|
||||
arduino-esp8266.build.spiffs_pagesize=256
|
||||
arduino-esp8266.build.debug_optim=
|
||||
arduino-esp8266.build.debug_port=
|
||||
arduino-esp8266.build.debug_level=
|
||||
arduino-esp8266.menu.xtal.80=80 MHz
|
||||
@ -1752,6 +1789,12 @@ arduino-esp8266.menu.dbg.Serial1=Serial1
|
||||
arduino-esp8266.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
arduino-esp8266.menu.lvl.None____=None
|
||||
arduino-esp8266.menu.lvl.None____.build.debug_level=
|
||||
arduino-esp8266.menu.optim.Smallest=None
|
||||
arduino-esp8266.menu.optim.Smallest.build.debug_optim=-Os
|
||||
arduino-esp8266.menu.optim.Lite=Lite
|
||||
arduino-esp8266.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
arduino-esp8266.menu.optim.Full=Optimum
|
||||
arduino-esp8266.menu.optim.Full.build.debug_optim=-Og
|
||||
arduino-esp8266.menu.lvl.SSL=SSL
|
||||
arduino-esp8266.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
arduino-esp8266.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -1858,6 +1901,7 @@ espmxdevkit.serial.disableRTS=true
|
||||
espmxdevkit.build.mcu=esp8266
|
||||
espmxdevkit.build.core=esp8266
|
||||
espmxdevkit.build.spiffs_pagesize=256
|
||||
espmxdevkit.build.debug_optim=
|
||||
espmxdevkit.build.debug_port=
|
||||
espmxdevkit.build.debug_level=
|
||||
espmxdevkit.menu.xtal.80=80 MHz
|
||||
@ -1997,6 +2041,12 @@ espmxdevkit.menu.dbg.Serial1=Serial1
|
||||
espmxdevkit.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espmxdevkit.menu.lvl.None____=None
|
||||
espmxdevkit.menu.lvl.None____.build.debug_level=
|
||||
espmxdevkit.menu.optim.Smallest=None
|
||||
espmxdevkit.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espmxdevkit.menu.optim.Lite=Lite
|
||||
espmxdevkit.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espmxdevkit.menu.optim.Full=Optimum
|
||||
espmxdevkit.menu.optim.Full.build.debug_optim=-Og
|
||||
espmxdevkit.menu.lvl.SSL=SSL
|
||||
espmxdevkit.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espmxdevkit.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -2103,6 +2153,7 @@ oak.serial.disableRTS=true
|
||||
oak.build.mcu=esp8266
|
||||
oak.build.core=esp8266
|
||||
oak.build.spiffs_pagesize=256
|
||||
oak.build.debug_optim=
|
||||
oak.build.debug_port=
|
||||
oak.build.debug_level=
|
||||
oak.menu.xtal.80=80 MHz
|
||||
@ -2210,6 +2261,12 @@ oak.menu.dbg.Serial1=Serial1
|
||||
oak.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
oak.menu.lvl.None____=None
|
||||
oak.menu.lvl.None____.build.debug_level=
|
||||
oak.menu.optim.Smallest=None
|
||||
oak.menu.optim.Smallest.build.debug_optim=-Os
|
||||
oak.menu.optim.Lite=Lite
|
||||
oak.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
oak.menu.optim.Full=Optimum
|
||||
oak.menu.optim.Full.build.debug_optim=-Og
|
||||
oak.menu.lvl.SSL=SSL
|
||||
oak.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
oak.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -2324,6 +2381,7 @@ espduino.serial.disableRTS=true
|
||||
espduino.build.mcu=esp8266
|
||||
espduino.build.core=esp8266
|
||||
espduino.build.spiffs_pagesize=256
|
||||
espduino.build.debug_optim=
|
||||
espduino.build.debug_port=
|
||||
espduino.build.debug_level=
|
||||
espduino.menu.xtal.80=80 MHz
|
||||
@ -2430,6 +2488,12 @@ espduino.menu.dbg.Serial1=Serial1
|
||||
espduino.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espduino.menu.lvl.None____=None
|
||||
espduino.menu.lvl.None____.build.debug_level=
|
||||
espduino.menu.optim.Smallest=None
|
||||
espduino.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espduino.menu.optim.Lite=Lite
|
||||
espduino.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espduino.menu.optim.Full=Optimum
|
||||
espduino.menu.optim.Full.build.debug_optim=-Og
|
||||
espduino.menu.lvl.SSL=SSL
|
||||
espduino.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espduino.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -2535,6 +2599,7 @@ espectro.serial.disableRTS=true
|
||||
espectro.build.mcu=esp8266
|
||||
espectro.build.core=esp8266
|
||||
espectro.build.spiffs_pagesize=256
|
||||
espectro.build.debug_optim=
|
||||
espectro.build.debug_port=
|
||||
espectro.build.debug_level=
|
||||
espectro.menu.xtal.80=80 MHz
|
||||
@ -2642,6 +2707,12 @@ espectro.menu.dbg.Serial1=Serial1
|
||||
espectro.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espectro.menu.lvl.None____=None
|
||||
espectro.menu.lvl.None____.build.debug_level=
|
||||
espectro.menu.optim.Smallest=None
|
||||
espectro.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espectro.menu.optim.Lite=Lite
|
||||
espectro.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espectro.menu.optim.Full=Optimum
|
||||
espectro.menu.optim.Full.build.debug_optim=-Og
|
||||
espectro.menu.lvl.SSL=SSL
|
||||
espectro.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espectro.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -2747,6 +2818,7 @@ espino.serial.disableRTS=true
|
||||
espino.build.mcu=esp8266
|
||||
espino.build.core=esp8266
|
||||
espino.build.spiffs_pagesize=256
|
||||
espino.build.debug_optim=
|
||||
espino.build.debug_port=
|
||||
espino.build.debug_level=
|
||||
espino.menu.xtal.80=80 MHz
|
||||
@ -2857,6 +2929,12 @@ espino.menu.dbg.Serial1=Serial1
|
||||
espino.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espino.menu.lvl.None____=None
|
||||
espino.menu.lvl.None____.build.debug_level=
|
||||
espino.menu.optim.Smallest=None
|
||||
espino.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espino.menu.optim.Lite=Lite
|
||||
espino.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espino.menu.optim.Full=Optimum
|
||||
espino.menu.optim.Full.build.debug_optim=-Og
|
||||
espino.menu.lvl.SSL=SSL
|
||||
espino.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espino.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -2962,6 +3040,7 @@ espresso_lite_v1.serial.disableRTS=true
|
||||
espresso_lite_v1.build.mcu=esp8266
|
||||
espresso_lite_v1.build.core=esp8266
|
||||
espresso_lite_v1.build.spiffs_pagesize=256
|
||||
espresso_lite_v1.build.debug_optim=
|
||||
espresso_lite_v1.build.debug_port=
|
||||
espresso_lite_v1.build.debug_level=
|
||||
espresso_lite_v1.menu.xtal.80=80 MHz
|
||||
@ -3072,6 +3151,12 @@ espresso_lite_v1.menu.dbg.Serial1=Serial1
|
||||
espresso_lite_v1.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espresso_lite_v1.menu.lvl.None____=None
|
||||
espresso_lite_v1.menu.lvl.None____.build.debug_level=
|
||||
espresso_lite_v1.menu.optim.Smallest=None
|
||||
espresso_lite_v1.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espresso_lite_v1.menu.optim.Lite=Lite
|
||||
espresso_lite_v1.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espresso_lite_v1.menu.optim.Full=Optimum
|
||||
espresso_lite_v1.menu.optim.Full.build.debug_optim=-Og
|
||||
espresso_lite_v1.menu.lvl.SSL=SSL
|
||||
espresso_lite_v1.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espresso_lite_v1.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -3177,6 +3262,7 @@ espresso_lite_v2.serial.disableRTS=true
|
||||
espresso_lite_v2.build.mcu=esp8266
|
||||
espresso_lite_v2.build.core=esp8266
|
||||
espresso_lite_v2.build.spiffs_pagesize=256
|
||||
espresso_lite_v2.build.debug_optim=
|
||||
espresso_lite_v2.build.debug_port=
|
||||
espresso_lite_v2.build.debug_level=
|
||||
espresso_lite_v2.menu.xtal.80=80 MHz
|
||||
@ -3287,6 +3373,12 @@ espresso_lite_v2.menu.dbg.Serial1=Serial1
|
||||
espresso_lite_v2.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espresso_lite_v2.menu.lvl.None____=None
|
||||
espresso_lite_v2.menu.lvl.None____.build.debug_level=
|
||||
espresso_lite_v2.menu.optim.Smallest=None
|
||||
espresso_lite_v2.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espresso_lite_v2.menu.optim.Lite=Lite
|
||||
espresso_lite_v2.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espresso_lite_v2.menu.optim.Full=Optimum
|
||||
espresso_lite_v2.menu.optim.Full.build.debug_optim=-Og
|
||||
espresso_lite_v2.menu.lvl.SSL=SSL
|
||||
espresso_lite_v2.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espresso_lite_v2.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -3401,6 +3493,7 @@ sonoff.serial.disableRTS=true
|
||||
sonoff.build.mcu=esp8266
|
||||
sonoff.build.core=esp8266
|
||||
sonoff.build.spiffs_pagesize=256
|
||||
sonoff.build.debug_optim=
|
||||
sonoff.build.debug_port=
|
||||
sonoff.build.debug_level=
|
||||
sonoff.menu.xtal.80=80 MHz
|
||||
@ -3540,6 +3633,12 @@ sonoff.menu.dbg.Serial1=Serial1
|
||||
sonoff.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
sonoff.menu.lvl.None____=None
|
||||
sonoff.menu.lvl.None____.build.debug_level=
|
||||
sonoff.menu.optim.Smallest=None
|
||||
sonoff.menu.optim.Smallest.build.debug_optim=-Os
|
||||
sonoff.menu.optim.Lite=Lite
|
||||
sonoff.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
sonoff.menu.optim.Full=Optimum
|
||||
sonoff.menu.optim.Full.build.debug_optim=-Og
|
||||
sonoff.menu.lvl.SSL=SSL
|
||||
sonoff.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
sonoff.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -3645,6 +3744,7 @@ inventone.serial.disableRTS=true
|
||||
inventone.build.mcu=esp8266
|
||||
inventone.build.core=esp8266
|
||||
inventone.build.spiffs_pagesize=256
|
||||
inventone.build.debug_optim=
|
||||
inventone.build.debug_port=
|
||||
inventone.build.debug_level=
|
||||
inventone.menu.xtal.80=80 MHz
|
||||
@ -3752,6 +3852,12 @@ inventone.menu.dbg.Serial1=Serial1
|
||||
inventone.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
inventone.menu.lvl.None____=None
|
||||
inventone.menu.lvl.None____.build.debug_level=
|
||||
inventone.menu.optim.Smallest=None
|
||||
inventone.menu.optim.Smallest.build.debug_optim=-Os
|
||||
inventone.menu.optim.Lite=Lite
|
||||
inventone.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
inventone.menu.optim.Full=Optimum
|
||||
inventone.menu.optim.Full.build.debug_optim=-Og
|
||||
inventone.menu.lvl.SSL=SSL
|
||||
inventone.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
inventone.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -3857,6 +3963,7 @@ d1_wroom_02.serial.disableRTS=true
|
||||
d1_wroom_02.build.mcu=esp8266
|
||||
d1_wroom_02.build.core=esp8266
|
||||
d1_wroom_02.build.spiffs_pagesize=256
|
||||
d1_wroom_02.build.debug_optim=
|
||||
d1_wroom_02.build.debug_port=
|
||||
d1_wroom_02.build.debug_level=
|
||||
d1_wroom_02.menu.xtal.80=80 MHz
|
||||
@ -3980,6 +4087,12 @@ d1_wroom_02.menu.dbg.Serial1=Serial1
|
||||
d1_wroom_02.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1_wroom_02.menu.lvl.None____=None
|
||||
d1_wroom_02.menu.lvl.None____.build.debug_level=
|
||||
d1_wroom_02.menu.optim.Smallest=None
|
||||
d1_wroom_02.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1_wroom_02.menu.optim.Lite=Lite
|
||||
d1_wroom_02.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1_wroom_02.menu.optim.Full=Optimum
|
||||
d1_wroom_02.menu.optim.Full.build.debug_optim=-Og
|
||||
d1_wroom_02.menu.lvl.SSL=SSL
|
||||
d1_wroom_02.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1_wroom_02.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -4085,6 +4198,7 @@ d1_mini.serial.disableRTS=true
|
||||
d1_mini.build.mcu=esp8266
|
||||
d1_mini.build.core=esp8266
|
||||
d1_mini.build.spiffs_pagesize=256
|
||||
d1_mini.build.debug_optim=
|
||||
d1_mini.build.debug_port=
|
||||
d1_mini.build.debug_level=
|
||||
d1_mini.menu.xtal.80=80 MHz
|
||||
@ -4192,6 +4306,12 @@ d1_mini.menu.dbg.Serial1=Serial1
|
||||
d1_mini.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1_mini.menu.lvl.None____=None
|
||||
d1_mini.menu.lvl.None____.build.debug_level=
|
||||
d1_mini.menu.optim.Smallest=None
|
||||
d1_mini.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1_mini.menu.optim.Lite=Lite
|
||||
d1_mini.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1_mini.menu.optim.Full=Optimum
|
||||
d1_mini.menu.optim.Full.build.debug_optim=-Og
|
||||
d1_mini.menu.lvl.SSL=SSL
|
||||
d1_mini.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1_mini.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -4297,6 +4417,7 @@ d1_mini_clone.serial.disableRTS=true
|
||||
d1_mini_clone.build.mcu=esp8266
|
||||
d1_mini_clone.build.core=esp8266
|
||||
d1_mini_clone.build.spiffs_pagesize=256
|
||||
d1_mini_clone.build.debug_optim=
|
||||
d1_mini_clone.build.debug_port=
|
||||
d1_mini_clone.build.debug_level=
|
||||
d1_mini_clone.menu.xtal.80=80 MHz
|
||||
@ -4421,6 +4542,12 @@ d1_mini_clone.menu.dbg.Serial1=Serial1
|
||||
d1_mini_clone.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1_mini_clone.menu.lvl.None____=None
|
||||
d1_mini_clone.menu.lvl.None____.build.debug_level=
|
||||
d1_mini_clone.menu.optim.Smallest=None
|
||||
d1_mini_clone.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1_mini_clone.menu.optim.Lite=Lite
|
||||
d1_mini_clone.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1_mini_clone.menu.optim.Full=Optimum
|
||||
d1_mini_clone.menu.optim.Full.build.debug_optim=-Og
|
||||
d1_mini_clone.menu.lvl.SSL=SSL
|
||||
d1_mini_clone.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1_mini_clone.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -4526,6 +4653,7 @@ d1_mini_lite.serial.disableRTS=true
|
||||
d1_mini_lite.build.mcu=esp8266
|
||||
d1_mini_lite.build.core=esp8266
|
||||
d1_mini_lite.build.spiffs_pagesize=256
|
||||
d1_mini_lite.build.debug_optim=
|
||||
d1_mini_lite.build.debug_port=
|
||||
d1_mini_lite.build.debug_level=
|
||||
d1_mini_lite.menu.xtal.80=80 MHz
|
||||
@ -4665,6 +4793,12 @@ d1_mini_lite.menu.dbg.Serial1=Serial1
|
||||
d1_mini_lite.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1_mini_lite.menu.lvl.None____=None
|
||||
d1_mini_lite.menu.lvl.None____.build.debug_level=
|
||||
d1_mini_lite.menu.optim.Smallest=None
|
||||
d1_mini_lite.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1_mini_lite.menu.optim.Lite=Lite
|
||||
d1_mini_lite.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1_mini_lite.menu.optim.Full=Optimum
|
||||
d1_mini_lite.menu.optim.Full.build.debug_optim=-Og
|
||||
d1_mini_lite.menu.lvl.SSL=SSL
|
||||
d1_mini_lite.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1_mini_lite.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -4770,6 +4904,7 @@ d1_mini_pro.serial.disableRTS=true
|
||||
d1_mini_pro.build.mcu=esp8266
|
||||
d1_mini_pro.build.core=esp8266
|
||||
d1_mini_pro.build.spiffs_pagesize=256
|
||||
d1_mini_pro.build.debug_optim=
|
||||
d1_mini_pro.build.debug_port=
|
||||
d1_mini_pro.build.debug_level=
|
||||
d1_mini_pro.menu.xtal.80=80 MHz
|
||||
@ -4869,6 +5004,12 @@ d1_mini_pro.menu.dbg.Serial1=Serial1
|
||||
d1_mini_pro.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1_mini_pro.menu.lvl.None____=None
|
||||
d1_mini_pro.menu.lvl.None____.build.debug_level=
|
||||
d1_mini_pro.menu.optim.Smallest=None
|
||||
d1_mini_pro.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1_mini_pro.menu.optim.Lite=Lite
|
||||
d1_mini_pro.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1_mini_pro.menu.optim.Full=Optimum
|
||||
d1_mini_pro.menu.optim.Full.build.debug_optim=-Og
|
||||
d1_mini_pro.menu.lvl.SSL=SSL
|
||||
d1_mini_pro.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1_mini_pro.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -4974,6 +5115,7 @@ d1.serial.disableRTS=true
|
||||
d1.build.mcu=esp8266
|
||||
d1.build.core=esp8266
|
||||
d1.build.spiffs_pagesize=256
|
||||
d1.build.debug_optim=
|
||||
d1.build.debug_port=
|
||||
d1.build.debug_level=
|
||||
d1.menu.xtal.80=80 MHz
|
||||
@ -5081,6 +5223,12 @@ d1.menu.dbg.Serial1=Serial1
|
||||
d1.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
d1.menu.lvl.None____=None
|
||||
d1.menu.lvl.None____.build.debug_level=
|
||||
d1.menu.optim.Smallest=None
|
||||
d1.menu.optim.Smallest.build.debug_optim=-Os
|
||||
d1.menu.optim.Lite=Lite
|
||||
d1.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
d1.menu.optim.Full=Optimum
|
||||
d1.menu.optim.Full.build.debug_optim=-Og
|
||||
d1.menu.lvl.SSL=SSL
|
||||
d1.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
d1.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -5186,6 +5334,7 @@ agruminolemon.serial.disableRTS=true
|
||||
agruminolemon.build.mcu=esp8266
|
||||
agruminolemon.build.core=esp8266
|
||||
agruminolemon.build.spiffs_pagesize=256
|
||||
agruminolemon.build.debug_optim=
|
||||
agruminolemon.build.debug_port=
|
||||
agruminolemon.build.debug_level=
|
||||
agruminolemon.menu.xtal.80=80 MHz
|
||||
@ -5309,6 +5458,12 @@ agruminolemon.menu.dbg.Serial1=Serial1
|
||||
agruminolemon.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
agruminolemon.menu.lvl.None____=None
|
||||
agruminolemon.menu.lvl.None____.build.debug_level=
|
||||
agruminolemon.menu.optim.Smallest=None
|
||||
agruminolemon.menu.optim.Smallest.build.debug_optim=-Os
|
||||
agruminolemon.menu.optim.Lite=Lite
|
||||
agruminolemon.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
agruminolemon.menu.optim.Full=Optimum
|
||||
agruminolemon.menu.optim.Full.build.debug_optim=-Og
|
||||
agruminolemon.menu.lvl.SSL=SSL
|
||||
agruminolemon.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
agruminolemon.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -5414,6 +5569,7 @@ nodemcu.serial.disableRTS=true
|
||||
nodemcu.build.mcu=esp8266
|
||||
nodemcu.build.core=esp8266
|
||||
nodemcu.build.spiffs_pagesize=256
|
||||
nodemcu.build.debug_optim=
|
||||
nodemcu.build.debug_port=
|
||||
nodemcu.build.debug_level=
|
||||
nodemcu.menu.xtal.80=80 MHz
|
||||
@ -5521,6 +5677,12 @@ nodemcu.menu.dbg.Serial1=Serial1
|
||||
nodemcu.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
nodemcu.menu.lvl.None____=None
|
||||
nodemcu.menu.lvl.None____.build.debug_level=
|
||||
nodemcu.menu.optim.Smallest=None
|
||||
nodemcu.menu.optim.Smallest.build.debug_optim=-Os
|
||||
nodemcu.menu.optim.Lite=Lite
|
||||
nodemcu.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
nodemcu.menu.optim.Full=Optimum
|
||||
nodemcu.menu.optim.Full.build.debug_optim=-Og
|
||||
nodemcu.menu.lvl.SSL=SSL
|
||||
nodemcu.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
nodemcu.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -5626,6 +5788,7 @@ nodemcuv2.serial.disableRTS=true
|
||||
nodemcuv2.build.mcu=esp8266
|
||||
nodemcuv2.build.core=esp8266
|
||||
nodemcuv2.build.spiffs_pagesize=256
|
||||
nodemcuv2.build.debug_optim=
|
||||
nodemcuv2.build.debug_port=
|
||||
nodemcuv2.build.debug_level=
|
||||
nodemcuv2.menu.xtal.80=80 MHz
|
||||
@ -5737,6 +5900,12 @@ nodemcuv2.menu.dbg.Serial1=Serial1
|
||||
nodemcuv2.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
nodemcuv2.menu.lvl.None____=None
|
||||
nodemcuv2.menu.lvl.None____.build.debug_level=
|
||||
nodemcuv2.menu.optim.Smallest=None
|
||||
nodemcuv2.menu.optim.Smallest.build.debug_optim=-Os
|
||||
nodemcuv2.menu.optim.Lite=Lite
|
||||
nodemcuv2.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
nodemcuv2.menu.optim.Full=Optimum
|
||||
nodemcuv2.menu.optim.Full.build.debug_optim=-Og
|
||||
nodemcuv2.menu.lvl.SSL=SSL
|
||||
nodemcuv2.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
nodemcuv2.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -5842,6 +6011,7 @@ modwifi.serial.disableRTS=true
|
||||
modwifi.build.mcu=esp8266
|
||||
modwifi.build.core=esp8266
|
||||
modwifi.build.spiffs_pagesize=256
|
||||
modwifi.build.debug_optim=
|
||||
modwifi.build.debug_port=
|
||||
modwifi.build.debug_level=
|
||||
modwifi.menu.xtal.80=80 MHz
|
||||
@ -5980,6 +6150,12 @@ modwifi.menu.dbg.Serial1=Serial1
|
||||
modwifi.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
modwifi.menu.lvl.None____=None
|
||||
modwifi.menu.lvl.None____.build.debug_level=
|
||||
modwifi.menu.optim.Smallest=None
|
||||
modwifi.menu.optim.Smallest.build.debug_optim=-Os
|
||||
modwifi.menu.optim.Lite=Lite
|
||||
modwifi.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
modwifi.menu.optim.Full=Optimum
|
||||
modwifi.menu.optim.Full.build.debug_optim=-Og
|
||||
modwifi.menu.lvl.SSL=SSL
|
||||
modwifi.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
modwifi.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -6085,6 +6261,7 @@ phoenix_v1.serial.disableRTS=true
|
||||
phoenix_v1.build.mcu=esp8266
|
||||
phoenix_v1.build.core=esp8266
|
||||
phoenix_v1.build.spiffs_pagesize=256
|
||||
phoenix_v1.build.debug_optim=
|
||||
phoenix_v1.build.debug_port=
|
||||
phoenix_v1.build.debug_level=
|
||||
phoenix_v1.menu.xtal.80=80 MHz
|
||||
@ -6195,6 +6372,12 @@ phoenix_v1.menu.dbg.Serial1=Serial1
|
||||
phoenix_v1.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
phoenix_v1.menu.lvl.None____=None
|
||||
phoenix_v1.menu.lvl.None____.build.debug_level=
|
||||
phoenix_v1.menu.optim.Smallest=None
|
||||
phoenix_v1.menu.optim.Smallest.build.debug_optim=-Os
|
||||
phoenix_v1.menu.optim.Lite=Lite
|
||||
phoenix_v1.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
phoenix_v1.menu.optim.Full=Optimum
|
||||
phoenix_v1.menu.optim.Full.build.debug_optim=-Og
|
||||
phoenix_v1.menu.lvl.SSL=SSL
|
||||
phoenix_v1.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
phoenix_v1.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -6300,6 +6483,7 @@ phoenix_v2.serial.disableRTS=true
|
||||
phoenix_v2.build.mcu=esp8266
|
||||
phoenix_v2.build.core=esp8266
|
||||
phoenix_v2.build.spiffs_pagesize=256
|
||||
phoenix_v2.build.debug_optim=
|
||||
phoenix_v2.build.debug_port=
|
||||
phoenix_v2.build.debug_level=
|
||||
phoenix_v2.menu.xtal.80=80 MHz
|
||||
@ -6410,6 +6594,12 @@ phoenix_v2.menu.dbg.Serial1=Serial1
|
||||
phoenix_v2.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
phoenix_v2.menu.lvl.None____=None
|
||||
phoenix_v2.menu.lvl.None____.build.debug_level=
|
||||
phoenix_v2.menu.optim.Smallest=None
|
||||
phoenix_v2.menu.optim.Smallest.build.debug_optim=-Os
|
||||
phoenix_v2.menu.optim.Lite=Lite
|
||||
phoenix_v2.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
phoenix_v2.menu.optim.Full=Optimum
|
||||
phoenix_v2.menu.optim.Full.build.debug_optim=-Og
|
||||
phoenix_v2.menu.lvl.SSL=SSL
|
||||
phoenix_v2.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
phoenix_v2.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -6515,6 +6705,7 @@ eduinowifi.serial.disableRTS=true
|
||||
eduinowifi.build.mcu=esp8266
|
||||
eduinowifi.build.core=esp8266
|
||||
eduinowifi.build.spiffs_pagesize=256
|
||||
eduinowifi.build.debug_optim=
|
||||
eduinowifi.build.debug_port=
|
||||
eduinowifi.build.debug_level=
|
||||
eduinowifi.menu.xtal.80=80 MHz
|
||||
@ -6622,6 +6813,12 @@ eduinowifi.menu.dbg.Serial1=Serial1
|
||||
eduinowifi.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
eduinowifi.menu.lvl.None____=None
|
||||
eduinowifi.menu.lvl.None____.build.debug_level=
|
||||
eduinowifi.menu.optim.Smallest=None
|
||||
eduinowifi.menu.optim.Smallest.build.debug_optim=-Os
|
||||
eduinowifi.menu.optim.Lite=Lite
|
||||
eduinowifi.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
eduinowifi.menu.optim.Full=Optimum
|
||||
eduinowifi.menu.optim.Full.build.debug_optim=-Og
|
||||
eduinowifi.menu.lvl.SSL=SSL
|
||||
eduinowifi.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
eduinowifi.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -6727,6 +6924,7 @@ wiolink.serial.disableRTS=true
|
||||
wiolink.build.mcu=esp8266
|
||||
wiolink.build.core=esp8266
|
||||
wiolink.build.spiffs_pagesize=256
|
||||
wiolink.build.debug_optim=
|
||||
wiolink.build.debug_port=
|
||||
wiolink.build.debug_level=
|
||||
wiolink.menu.xtal.80=80 MHz
|
||||
@ -6834,6 +7032,12 @@ wiolink.menu.dbg.Serial1=Serial1
|
||||
wiolink.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
wiolink.menu.lvl.None____=None
|
||||
wiolink.menu.lvl.None____.build.debug_level=
|
||||
wiolink.menu.optim.Smallest=None
|
||||
wiolink.menu.optim.Smallest.build.debug_optim=-Os
|
||||
wiolink.menu.optim.Lite=Lite
|
||||
wiolink.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
wiolink.menu.optim.Full=Optimum
|
||||
wiolink.menu.optim.Full.build.debug_optim=-Og
|
||||
wiolink.menu.lvl.SSL=SSL
|
||||
wiolink.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
wiolink.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -6939,6 +7143,7 @@ blynk.serial.disableRTS=true
|
||||
blynk.build.mcu=esp8266
|
||||
blynk.build.core=esp8266
|
||||
blynk.build.spiffs_pagesize=256
|
||||
blynk.build.debug_optim=
|
||||
blynk.build.debug_port=
|
||||
blynk.build.debug_level=
|
||||
blynk.menu.xtal.80=80 MHz
|
||||
@ -7046,6 +7251,12 @@ blynk.menu.dbg.Serial1=Serial1
|
||||
blynk.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
blynk.menu.lvl.None____=None
|
||||
blynk.menu.lvl.None____.build.debug_level=
|
||||
blynk.menu.optim.Smallest=None
|
||||
blynk.menu.optim.Smallest.build.debug_optim=-Os
|
||||
blynk.menu.optim.Lite=Lite
|
||||
blynk.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
blynk.menu.optim.Full=Optimum
|
||||
blynk.menu.optim.Full.build.debug_optim=-Og
|
||||
blynk.menu.lvl.SSL=SSL
|
||||
blynk.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
blynk.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -7151,6 +7362,7 @@ thing.serial.disableRTS=true
|
||||
thing.build.mcu=esp8266
|
||||
thing.build.core=esp8266
|
||||
thing.build.spiffs_pagesize=256
|
||||
thing.build.debug_optim=
|
||||
thing.build.debug_port=
|
||||
thing.build.debug_level=
|
||||
thing.menu.xtal.80=80 MHz
|
||||
@ -7258,6 +7470,12 @@ thing.menu.dbg.Serial1=Serial1
|
||||
thing.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
thing.menu.lvl.None____=None
|
||||
thing.menu.lvl.None____.build.debug_level=
|
||||
thing.menu.optim.Smallest=None
|
||||
thing.menu.optim.Smallest.build.debug_optim=-Os
|
||||
thing.menu.optim.Lite=Lite
|
||||
thing.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
thing.menu.optim.Full=Optimum
|
||||
thing.menu.optim.Full.build.debug_optim=-Og
|
||||
thing.menu.lvl.SSL=SSL
|
||||
thing.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
thing.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -7363,6 +7581,7 @@ thingdev.serial.disableRTS=true
|
||||
thingdev.build.mcu=esp8266
|
||||
thingdev.build.core=esp8266
|
||||
thingdev.build.spiffs_pagesize=256
|
||||
thingdev.build.debug_optim=
|
||||
thingdev.build.debug_port=
|
||||
thingdev.build.debug_level=
|
||||
thingdev.menu.xtal.80=80 MHz
|
||||
@ -7470,6 +7689,12 @@ thingdev.menu.dbg.Serial1=Serial1
|
||||
thingdev.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
thingdev.menu.lvl.None____=None
|
||||
thingdev.menu.lvl.None____.build.debug_level=
|
||||
thingdev.menu.optim.Smallest=None
|
||||
thingdev.menu.optim.Smallest.build.debug_optim=-Os
|
||||
thingdev.menu.optim.Lite=Lite
|
||||
thingdev.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
thingdev.menu.optim.Full=Optimum
|
||||
thingdev.menu.optim.Full.build.debug_optim=-Og
|
||||
thingdev.menu.lvl.SSL=SSL
|
||||
thingdev.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
thingdev.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -7575,6 +7800,7 @@ esp210.build.mcu=esp8266
|
||||
esp210.build.core=esp8266
|
||||
esp210.build.variant=generic
|
||||
esp210.build.spiffs_pagesize=256
|
||||
esp210.build.debug_optim=
|
||||
esp210.build.debug_port=
|
||||
esp210.build.debug_level=
|
||||
esp210.menu.xtal.80=80 MHz
|
||||
@ -7682,6 +7908,12 @@ esp210.menu.dbg.Serial1=Serial1
|
||||
esp210.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
esp210.menu.lvl.None____=None
|
||||
esp210.menu.lvl.None____.build.debug_level=
|
||||
esp210.menu.optim.Smallest=None
|
||||
esp210.menu.optim.Smallest.build.debug_optim=-Os
|
||||
esp210.menu.optim.Lite=Lite
|
||||
esp210.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
esp210.menu.optim.Full=Optimum
|
||||
esp210.menu.optim.Full.build.debug_optim=-Og
|
||||
esp210.menu.lvl.SSL=SSL
|
||||
esp210.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
esp210.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -7787,6 +8019,7 @@ espinotee.serial.disableRTS=true
|
||||
espinotee.build.mcu=esp8266
|
||||
espinotee.build.core=esp8266
|
||||
espinotee.build.spiffs_pagesize=256
|
||||
espinotee.build.debug_optim=
|
||||
espinotee.build.debug_port=
|
||||
espinotee.build.debug_level=
|
||||
espinotee.menu.xtal.80=80 MHz
|
||||
@ -7894,6 +8127,12 @@ espinotee.menu.dbg.Serial1=Serial1
|
||||
espinotee.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
espinotee.menu.lvl.None____=None
|
||||
espinotee.menu.lvl.None____.build.debug_level=
|
||||
espinotee.menu.optim.Smallest=None
|
||||
espinotee.menu.optim.Smallest.build.debug_optim=-Os
|
||||
espinotee.menu.optim.Lite=Lite
|
||||
espinotee.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
espinotee.menu.optim.Full=Optimum
|
||||
espinotee.menu.optim.Full.build.debug_optim=-Og
|
||||
espinotee.menu.lvl.SSL=SSL
|
||||
espinotee.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
espinotee.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -7999,6 +8238,7 @@ wifi_kit_8.serial.disableRTS=true
|
||||
wifi_kit_8.build.mcu=esp8266
|
||||
wifi_kit_8.build.core=esp8266
|
||||
wifi_kit_8.build.spiffs_pagesize=256
|
||||
wifi_kit_8.build.debug_optim=
|
||||
wifi_kit_8.build.debug_port=
|
||||
wifi_kit_8.build.debug_level=
|
||||
wifi_kit_8.menu.xtal.80=80 MHz
|
||||
@ -8106,6 +8346,12 @@ wifi_kit_8.menu.dbg.Serial1=Serial1
|
||||
wifi_kit_8.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
wifi_kit_8.menu.lvl.None____=None
|
||||
wifi_kit_8.menu.lvl.None____.build.debug_level=
|
||||
wifi_kit_8.menu.optim.Smallest=None
|
||||
wifi_kit_8.menu.optim.Smallest.build.debug_optim=-Os
|
||||
wifi_kit_8.menu.optim.Lite=Lite
|
||||
wifi_kit_8.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
wifi_kit_8.menu.optim.Full=Optimum
|
||||
wifi_kit_8.menu.optim.Full.build.debug_optim=-Og
|
||||
wifi_kit_8.menu.lvl.SSL=SSL
|
||||
wifi_kit_8.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
wifi_kit_8.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -8211,6 +8457,7 @@ wifiduino.serial.disableRTS=true
|
||||
wifiduino.build.mcu=esp8266
|
||||
wifiduino.build.core=esp8266
|
||||
wifiduino.build.spiffs_pagesize=256
|
||||
wifiduino.build.debug_optim=
|
||||
wifiduino.build.debug_port=
|
||||
wifiduino.build.debug_level=
|
||||
wifiduino.menu.xtal.80=80 MHz
|
||||
@ -8318,6 +8565,12 @@ wifiduino.menu.dbg.Serial1=Serial1
|
||||
wifiduino.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
wifiduino.menu.lvl.None____=None
|
||||
wifiduino.menu.lvl.None____.build.debug_level=
|
||||
wifiduino.menu.optim.Smallest=None
|
||||
wifiduino.menu.optim.Smallest.build.debug_optim=-Os
|
||||
wifiduino.menu.optim.Lite=Lite
|
||||
wifiduino.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
wifiduino.menu.optim.Full=Optimum
|
||||
wifiduino.menu.optim.Full.build.debug_optim=-Og
|
||||
wifiduino.menu.lvl.SSL=SSL
|
||||
wifiduino.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
wifiduino.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -8440,6 +8693,7 @@ wifinfo.serial.disableRTS=true
|
||||
wifinfo.build.mcu=esp8266
|
||||
wifinfo.build.core=esp8266
|
||||
wifinfo.build.spiffs_pagesize=256
|
||||
wifinfo.build.debug_optim=
|
||||
wifinfo.build.debug_port=
|
||||
wifinfo.build.debug_level=
|
||||
wifinfo.menu.xtal.80=80 MHz
|
||||
@ -8586,6 +8840,12 @@ wifinfo.menu.dbg.Serial1=Serial1
|
||||
wifinfo.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
wifinfo.menu.lvl.None____=None
|
||||
wifinfo.menu.lvl.None____.build.debug_level=
|
||||
wifinfo.menu.optim.Smallest=None
|
||||
wifinfo.menu.optim.Smallest.build.debug_optim=-Os
|
||||
wifinfo.menu.optim.Lite=Lite
|
||||
wifinfo.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
wifinfo.menu.optim.Full=Optimum
|
||||
wifinfo.menu.optim.Full.build.debug_optim=-Og
|
||||
wifinfo.menu.lvl.SSL=SSL
|
||||
wifinfo.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
wifinfo.menu.lvl.TLS_MEM=TLS_MEM
|
||||
@ -8691,6 +8951,7 @@ cw01.serial.disableRTS=true
|
||||
cw01.build.mcu=esp8266
|
||||
cw01.build.core=esp8266
|
||||
cw01.build.spiffs_pagesize=256
|
||||
cw01.build.debug_optim=
|
||||
cw01.build.debug_port=
|
||||
cw01.build.debug_level=
|
||||
cw01.menu.xtal.80=80 MHz
|
||||
@ -8801,6 +9062,12 @@ cw01.menu.dbg.Serial1=Serial1
|
||||
cw01.menu.dbg.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
|
||||
cw01.menu.lvl.None____=None
|
||||
cw01.menu.lvl.None____.build.debug_level=
|
||||
cw01.menu.optim.Smallest=None
|
||||
cw01.menu.optim.Smallest.build.debug_optim=-Os
|
||||
cw01.menu.optim.Lite=Lite
|
||||
cw01.menu.optim.Lite.build.debug_optim=-Os -fno-optimize-sibling-calls
|
||||
cw01.menu.optim.Full=Optimum
|
||||
cw01.menu.optim.Full.build.debug_optim=-Og
|
||||
cw01.menu.lvl.SSL=SSL
|
||||
cw01.menu.lvl.SSL.build.debug_level= -DDEBUG_ESP_SSL
|
||||
cw01.menu.lvl.TLS_MEM=TLS_MEM
|
||||
|
@ -4,8 +4,13 @@
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define _DEBUG_LEAF_FUNCTION(...) __asm__ __volatile__("" ::: "a0", "memory")
|
||||
|
||||
#ifdef DEBUG_ESP_CORE
|
||||
#define DEBUGV(fmt, ...) ::printf((PGM_P)PSTR(fmt), ##__VA_ARGS__)
|
||||
#define DEBUG_LEAF_FUNCTION _DEBUG_LEAF_FUNCTION
|
||||
#else
|
||||
#define DEBUG_LEAF_FUNCTION(...)
|
||||
#endif
|
||||
|
||||
#ifndef DEBUGV
|
||||
|
@ -12,42 +12,42 @@ Example:
|
||||
|
||||
Exception (0): epc1=0x402103f4 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
|
||||
|
||||
ctx: sys
|
||||
ctx: sys
|
||||
sp: 3ffffc10 end: 3fffffb0 offset: 01a0
|
||||
|
||||
>>>stack>>>
|
||||
3ffffdb0: 40223e00 3fff6f50 00000010 60000600
|
||||
3ffffdc0: 00000001 4021f774 3fffc250 4000050c
|
||||
3ffffdd0: 400043d5 00000030 00000016 ffffffff
|
||||
3ffffde0: 400044ab 3fffc718 3ffffed0 08000000
|
||||
3ffffdf0: 60000200 08000000 00000003 00000000
|
||||
3ffffe00: 0000ffff 00000001 04000002 003fd000
|
||||
3ffffe10: 3fff7188 000003fd 3fff2564 00000030
|
||||
3ffffe20: 40101709 00000008 00000008 00000020
|
||||
3ffffe30: c1948db3 394c5e70 7f2060f2 c6ba0c87
|
||||
3ffffe40: 3fff7058 00000001 40238d41 3fff6ff0
|
||||
3ffffe50: 3fff6f50 00000010 60000600 00000020
|
||||
3ffffe60: 402301a8 3fff7098 3fff7014 40238c77
|
||||
3ffffe70: 4022fb6c 40230ebe 3fff1a5b 3fff6f00
|
||||
3ffffe80: 3ffffec8 00000010 40231061 3fff0f90
|
||||
3ffffe90: 3fff6848 3ffed0c0 60000600 3fff6ae0
|
||||
3ffffea0: 3fff0f90 3fff0f90 3fff6848 3fff6d40
|
||||
3ffffeb0: 3fff28e8 40101233 d634fe1a fffeffff
|
||||
3ffffec0: 00000001 00000000 4022d5d6 3fff6848
|
||||
3ffffed0: 00000002 4000410f 3fff2394 3fff6848
|
||||
3ffffee0: 3fffc718 40004a3c 000003fd 3fff7188
|
||||
3ffffef0: 3fffc718 40101510 00000378 3fff1a5b
|
||||
3fffff00: 000003fd 4021d2e7 00000378 000003ff
|
||||
3fffff10: 00001000 4021d37d 3fff2564 000003ff
|
||||
3fffff20: 000003fd 60000600 003fd000 3fff2564
|
||||
3fffff30: ffffff00 55aa55aa 00000312 0000001c
|
||||
3fffff40: 0000001c 0000008a 0000006d 000003ff
|
||||
3fffff50: 4021d224 3ffecf90 00000000 3ffed0c0
|
||||
3fffff60: 00000001 4021c2e9 00000003 3fff1238
|
||||
3fffff70: 4021c071 3ffecf84 3ffecf30 0026a2b0
|
||||
3fffff80: 4021c0b6 3fffdab0 00000000 3fffdcb0
|
||||
3fffff90: 3ffecf40 3fffdab0 00000000 3fffdcc0
|
||||
3fffffa0: 40000f49 40000f49 3fffdab0 40000f49
|
||||
3ffffdb0: 40223e00 3fff6f50 00000010 60000600
|
||||
3ffffdc0: 00000001 4021f774 3fffc250 4000050c
|
||||
3ffffdd0: 400043d5 00000030 00000016 ffffffff
|
||||
3ffffde0: 400044ab 3fffc718 3ffffed0 08000000
|
||||
3ffffdf0: 60000200 08000000 00000003 00000000
|
||||
3ffffe00: 0000ffff 00000001 04000002 003fd000
|
||||
3ffffe10: 3fff7188 000003fd 3fff2564 00000030
|
||||
3ffffe20: 40101709 00000008 00000008 00000020
|
||||
3ffffe30: c1948db3 394c5e70 7f2060f2 c6ba0c87
|
||||
3ffffe40: 3fff7058 00000001 40238d41 3fff6ff0
|
||||
3ffffe50: 3fff6f50 00000010 60000600 00000020
|
||||
3ffffe60: 402301a8 3fff7098 3fff7014 40238c77
|
||||
3ffffe70: 4022fb6c 40230ebe 3fff1a5b 3fff6f00
|
||||
3ffffe80: 3ffffec8 00000010 40231061 3fff0f90
|
||||
3ffffe90: 3fff6848 3ffed0c0 60000600 3fff6ae0
|
||||
3ffffea0: 3fff0f90 3fff0f90 3fff6848 3fff6d40
|
||||
3ffffeb0: 3fff28e8 40101233 d634fe1a fffeffff
|
||||
3ffffec0: 00000001 00000000 4022d5d6 3fff6848
|
||||
3ffffed0: 00000002 4000410f 3fff2394 3fff6848
|
||||
3ffffee0: 3fffc718 40004a3c 000003fd 3fff7188
|
||||
3ffffef0: 3fffc718 40101510 00000378 3fff1a5b
|
||||
3fffff00: 000003fd 4021d2e7 00000378 000003ff
|
||||
3fffff10: 00001000 4021d37d 3fff2564 000003ff
|
||||
3fffff20: 000003fd 60000600 003fd000 3fff2564
|
||||
3fffff30: ffffff00 55aa55aa 00000312 0000001c
|
||||
3fffff40: 0000001c 0000008a 0000006d 000003ff
|
||||
3fffff50: 4021d224 3ffecf90 00000000 3ffed0c0
|
||||
3fffff60: 00000001 4021c2e9 00000003 3fff1238
|
||||
3fffff70: 4021c071 3ffecf84 3ffecf30 0026a2b0
|
||||
3fffff80: 4021c0b6 3fffdab0 00000000 3fffdcb0
|
||||
3fffff90: 3ffecf40 3fffdab0 00000000 3fffdcc0
|
||||
3fffffa0: 40000f49 40000f49 3fffdab0 40000f49
|
||||
<<<stack<<<
|
||||
|
||||
The first number after ``Exception`` gives the cause of the reset. a
|
||||
@ -57,7 +57,10 @@ the hex after are the stack dump.
|
||||
Decode
|
||||
~~~~~~
|
||||
|
||||
It's possible to decode the Stack to readable information. For more info see the `Esp Exception Decoder <https://github.com/me-no-dev/EspExceptionDecoder>`__ tool.
|
||||
It's possible to decode the Stack to readable information.
|
||||
You can get a copy and read about the `Esp Exception Decoder <https://github.com/me-no-dev/EspExceptionDecoder>`__ tool.
|
||||
|
||||
For a troubleshooting example using the Exception Decoder Tool, read `FAQ: My ESP Crashes <../faq/a02-my-esp-crashes.rst#exception-decoder>`__.
|
||||
|
||||
.. figure:: ESP_Exception_Decoderp.png
|
||||
:alt: ESP Exception Decoder
|
||||
|
@ -11,6 +11,7 @@ My ESP crashes running some code. How to troubleshoot it?
|
||||
- `Exception <#exception>`__
|
||||
- `Watchdog <#watchdog>`__
|
||||
- `Exception Decoder <#exception-decoder>`__
|
||||
- `Improving Exception Decoder Results <#improving-exception-decoder-results>`__
|
||||
- `Other Common Causes for Crashes <#other-causes-for-crashes>`__
|
||||
- `If at the Wall, Enter an Issue
|
||||
Report <#if-at-the-wall-enter-an-issue-report>`__
|
||||
@ -236,6 +237,7 @@ If you don't have any code for troubleshooting, use the example below:
|
||||
|
||||
void loop(){}
|
||||
|
||||
|
||||
Enable the Out-Of-Memory (*OOM*) debug option (in the *Tools > Debug Level*
|
||||
menu), compile/flash/upload this code to your ESP (Ctrl+U) and start Serial
|
||||
Monitor (Ctrl+Shift+M). You should shortly see ESP restarting every couple
|
||||
@ -270,31 +272,92 @@ Decoder <https://github.com/me-no-dev/EspExceptionDecoder>`__ you can
|
||||
track down where the module is crashing whenever you see the stack trace
|
||||
dropped. The same procedure applies to crashes caused by exceptions.
|
||||
|
||||
Note: To decode the exact line of code where the application
|
||||
Note, to decode the exact line of code where the application
|
||||
crashed, you need to use ESP Exception Decoder in context of sketch
|
||||
you have just loaded to the module for diagnosis. Decoder is not
|
||||
able to correctly decode the stack trace dropped by some other
|
||||
application not compiled and loaded from your Arduino IDE.
|
||||
|
||||
|
||||
Improving Exception Decoder Results
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Due to the limited resources on the device, our default compiler optimizations
|
||||
focus on creating the smallest code size (``.bin`` file). The GCC compiler's
|
||||
option ``-Os`` contains the base set of optimizations used. This set is fine for
|
||||
release but not ideal for debugging.
|
||||
|
||||
Our view of a crash is often the `Stack Dump <../Troubleshooting/stack_dump.rst>`__
|
||||
which gets copy/pasted into an Exception Decoder.
|
||||
For some situations, the optimizer doesn't write caller return addresses to the
|
||||
stack. When we crash, the list of functions called is missing. And when the
|
||||
crash occurs in a leaf function, there is seldom if ever any evidence of who
|
||||
called.
|
||||
|
||||
With the ``-Os`` option, functions called once are inlined into the calling
|
||||
function. A chain of these functions can optimize down to the calling function.
|
||||
When the crash occurs in one of these chain functions, the actual location in
|
||||
the source code is no longer available.
|
||||
|
||||
When you select ``Debug Optimization: Lite`` on the Arduino IDE Tools menu, it
|
||||
turns off ``optimize-sibling-calls``. Turning off this optimization allows more
|
||||
caller addresses to be written to the stack, improving the results from the
|
||||
Exception Decoder. Without this option, the callers involved in the crash may be
|
||||
missing from the Decoder results. Because of the limited stack space, there is
|
||||
the remote possibility that removing this optimization could lead to more
|
||||
frequent stack overflows. You only want to do this in a debug setting. This
|
||||
option does not help the chained function issue.
|
||||
|
||||
When you select ``Debug Optimization: Optimum``, you get an even more complete
|
||||
stack trace. For example, chained function calls may show up. This selection
|
||||
uses the compiler option ``-Og``. GCC considers this the ideal optimization for
|
||||
the "edit-compile-debug cycle" ... "producing debuggable code." You can read the
|
||||
specifics at `GCC's Optimize Options <https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html>`__
|
||||
|
||||
When global optimization creates build size issues or stack overflow issues,
|
||||
select ``Debug Optimization: None``, and use a targeted approach with
|
||||
``#pragma GCC optimize("Og")`` at the module level. Or, if you want to use a
|
||||
different set of optimizations, you can set optimizations through build options.
|
||||
Read more at `Global Build Options <a06-global-build-options.rst>`__.
|
||||
|
||||
For non-Arduino IDE build platforms, you may need to research how to add build
|
||||
options. Some build platforms already use ``-Og`` for debug builds.
|
||||
|
||||
A crash in a leaf function may not leave the caller's address on the stack.
|
||||
The return address can stay in a register for the duration of the call.
|
||||
Resulting in a crash report identifying the crashing function without a
|
||||
trace of who called. You can encourage the compiler to save the caller's
|
||||
return address by adding an inline assembly trick
|
||||
``__asm__ __volatile__("" ::: "a0", "memory");`` at the beginning of the
|
||||
function's body. Or instead, for a debug build conditional option, use the
|
||||
macro ``DEBUG_LEAF_FUNCTION()`` from ``#include <debug.h>``. For compiler
|
||||
toolchain 3.2.0 and above, the ``-Og`` option is an alternative solution.
|
||||
|
||||
In some cases, adding ``#pragma GCC optimize("Og,no-ipa-pure-const")`` to a
|
||||
module as well as using ``DEBUG_LEAF_FUNCTION()`` in a leaf function were
|
||||
needed to display a complete call chain. Or use
|
||||
``#pragma GCC optimize("Os,no-inline,no-optimize-sibling-calls,no-ipa-pure-const")``
|
||||
if you require optimization ``-Os``.
|
||||
|
||||
|
||||
Other Causes for Crashes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Interrupt Service Routines
|
||||
By default, all functions are compiled into flash, which means that the
|
||||
cache may kick in for that code. However, the cache currently can't be used
|
||||
during hardware interrupts. That means that, if you use a hardware ISR, such as
|
||||
attachInterrupt(gpio, myISR, CHANGE) for a GPIO change, the ISR must have the
|
||||
IRAM_ATTR attribute declared. Not only that, but the entire function tree
|
||||
By default, all functions are compiled into flash, which means that the
|
||||
cache may kick in for that code. However, the cache currently can't be used
|
||||
during hardware interrupts. That means that, if you use a hardware ISR, such as
|
||||
attachInterrupt(gpio, myISR, CHANGE) for a GPIO change, the ISR must have the
|
||||
IRAM_ATTR attribute declared. Not only that, but the entire function tree
|
||||
called from the ISR must also have the IRAM_ATTR declared.
|
||||
Be aware that every function that has this attribute reduces available memory.
|
||||
|
||||
In addition, it is not possible to execute delay() or yield() from an ISR,
|
||||
In addition, it is not possible to execute delay() or yield() from an ISR,
|
||||
or do blocking operations, or operations that disable the interrupts, e.g.: read
|
||||
a DHT.
|
||||
|
||||
Finally, an ISR has very high restrictions on timing for the executed code, meaning
|
||||
that executed code should not take longer than a very few microseconds. It is
|
||||
that executed code should not take longer than a very few microseconds. It is
|
||||
considered best practice to set a flag within the ISR, and then from within the loop()
|
||||
check and clear that flag, and execute code.
|
||||
|
||||
@ -303,7 +366,7 @@ Asynchronous Callbacks
|
||||
than ISRs, but some restrictions still apply.
|
||||
It is not possible to execute delay() or yield() from an asynchronous callback.
|
||||
Timing is not as tight as an ISR, but it should remain below a few milliseconds. This
|
||||
is a guideline. The hard timing requirements depend on the WiFi configuration and
|
||||
is a guideline. The hard timing requirements depend on the WiFi configuration and
|
||||
amount of traffic. In general, the CPU must not be hogged by the user code, as the
|
||||
longer it is away from servicing the WiFi stack, the more likely that memory corruption
|
||||
can happen.
|
||||
@ -311,8 +374,8 @@ Asynchronous Callbacks
|
||||
Memory, memory, memory
|
||||
Running out of heap is the **most common cause for crashes**. Because the build process for
|
||||
the ESP leaves out exceptions (they use memory), memory allocations that fail will do
|
||||
so silently. A typical example is when setting or concatenating a large String. If
|
||||
allocation has failed internally, then the internal string copy can corrupt data, and
|
||||
so silently. A typical example is when setting or concatenating a large String. If
|
||||
allocation has failed internally, then the internal string copy can corrupt data, and
|
||||
the ESP will crash.
|
||||
|
||||
In addition, doing many String concatenations in sequence, e.g.: using operator+()
|
||||
@ -348,9 +411,9 @@ Memory, memory, memory
|
||||
* If you use std libs like std::vector, make sure to call its ::reserve() method before filling it. This allows allocating only once, which reduces mem fragmentation, and makes sure that there are no empty unused slots left over in the container at the end.
|
||||
|
||||
Stack
|
||||
The amount of stack in the ESP is tiny at only 4KB. For normal development in large systems, it
|
||||
The amount of stack in the ESP is tiny at only 4KB. For normal development in large systems, it
|
||||
is good practice to use and abuse the stack, because it is faster for allocation/deallocation, the scope of the object is well defined, and deallocation automatically happens in reverse order as allocation, which means no mem fragmentation. However, with the tiny amount of stack available in the ESP, that practice is not really viable, at least not for big objects.
|
||||
|
||||
|
||||
* Large objects that have internally managed memory, such as String, std::string, std::vector, etc, are ok on the stack, because they internally allocate their buffers on the heap.
|
||||
* Large arrays on the stack, such as uint8_t buffer[2048] should be avoided on the stack and should be dynamically allocated instead (consider smart pointers).
|
||||
* Objects that have large data members, such as large arrays, should also be avoided on the stack, and should be dynamically allocated (consider smart pointers).
|
||||
@ -392,7 +455,7 @@ or `esp8266 / Arduino <https://github.com/esp8266/Arduino>`__ core,
|
||||
types and versions of O/S, you need to provide exact information on what
|
||||
your application is about. Only then, people willing to look into your
|
||||
issue may be able to compare it to a configuration they are familiar with.
|
||||
If you are lucky, they may even attempt to reproduce your issue on their
|
||||
If you are lucky, they may even attempt to reproduce your issue on their
|
||||
own equipment!
|
||||
This will be far more difficult if you provide only vague details,
|
||||
so somebody would need to ask you to find out what is really happening.
|
||||
|
@ -181,10 +181,10 @@ their builds.
|
||||
|
||||
There are two solutions to this issue:
|
||||
|
||||
1. Turn off the “Aggressively Cache Compiled core” feature, by setting
|
||||
1. Do nothing, and rely on aggressive cache workaround built into the
|
||||
script.
|
||||
2. Turn off the “Aggressively Cache Compiled core” feature, by setting
|
||||
``compiler.cache_core=false``.
|
||||
2. Rely on the not ideal fail-safe, aggressive cache workaround built
|
||||
into the script.
|
||||
|
||||
Using “compiler.cache_core=false”
|
||||
---------------------------------
|
||||
@ -253,14 +253,10 @@ problem would be cleared after a reboot. Or you can manually cleanup the
|
||||
|
||||
**Arduino command-line option overrides**
|
||||
|
||||
The script needs to know the working value of ``compiler.cache_core``
|
||||
that the Arduino IDE uses when building. This script can learn the state
|
||||
through documented locations; however, the Arduino IDE has two
|
||||
command-line options that can alter the results the Arduino IDE uses
|
||||
internally. And, the Arduino IDE does not provide a means for a script
|
||||
to learn the override value.
|
||||
If you are building with ``compiler.cache_core=true`` no action is
|
||||
needed. If ``false`` the script would benefit by knowing that.
|
||||
|
||||
These two command-line options are the problem:
|
||||
When using either of these two command-line options:
|
||||
|
||||
::
|
||||
|
||||
|
@ -127,7 +127,31 @@ There are a number of options.
|
||||
- The last (``NoAssert - NDEBUG``) is even quieter than the first (some
|
||||
internal guards are skipped to save more flash).
|
||||
- The other ones may be used when asked by a maintainer or if you are a
|
||||
developper trying to debug some issues.
|
||||
developer trying to debug some issues.
|
||||
|
||||
Debug Optimization
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Due to the limited resources on the device, our default compiler optimizations
|
||||
focus on creating the smallest code size (``.bin`` file). That is fine for
|
||||
release but not ideal for debugging.
|
||||
|
||||
``Debug Optimization`` use to improve Exception Decoder results.
|
||||
|
||||
- ``Lite`` impact on code size uses ``-fno-optimize-sibling-calls`` to alter
|
||||
the ``-Os`` compiler option to place more caller addresses on the Stack.
|
||||
- ``Optimum`` offers better quality stack content for the Exception Decoder at
|
||||
the expense of a larger code size. It uses the ``-Og`` compiler option, which
|
||||
turns off optimizations that can make debugging difficult while keeping
|
||||
others.
|
||||
- ``None`` no changes for debugging continue using ``-Os``.
|
||||
|
||||
Take note some sketches may start working after changing the optimization. Or
|
||||
fail less often. And it is also possible (not likely) that source code that
|
||||
was working with ``-Os`` may break with ``-Og``.
|
||||
|
||||
For more topic depth, read `Improving Exception Decoder Results <faq/a02-my-esp-crashes.rst#improving-exception-decoder-results>`__
|
||||
|
||||
|
||||
lwIP variant
|
||||
~~~~~~~~~~~~
|
||||
|
@ -8,7 +8,7 @@
|
||||
* this line is ignored
|
||||
*@create-file:build.opt@
|
||||
# this line is ignored
|
||||
-O3
|
||||
-Og
|
||||
// -fanalyzer
|
||||
-DUMM_STATS_FULL=1
|
||||
*/
|
||||
|
11
platform.txt
11
platform.txt
@ -44,6 +44,9 @@ build.stdcpp_level=-std=gnu++17
|
||||
|
||||
build.stacksmash_flags=
|
||||
|
||||
# Default - never leave undefined
|
||||
build.debug_optim=-Os
|
||||
|
||||
build.float=-u _printf_float -u _scanf_float
|
||||
build.led=
|
||||
|
||||
@ -70,24 +73,24 @@ compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
|
||||
compiler.sdk.path={runtime.platform.path}/tools/sdk
|
||||
|
||||
compiler.libc.path={runtime.platform.path}/tools/sdk/libc/xtensa-lx106-elf
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -D_GNU_SOURCE -DESP8266 {build.opt.flags} "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core"
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -D_GNU_SOURCE -DESP8266 {build.debug_optim} {build.opt.flags} "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core"
|
||||
|
||||
# support precompiled libraries in IDE v1.8.6+
|
||||
compiler.libraries.ldflags=
|
||||
|
||||
compiler.c.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.flags=-c "{compiler.warning_flags}-cflags" -std=gnu17 {build.stacksmash_flags} -Os -g -free -fipa-pta -Werror=return-type -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} {build.mmuflags} {build.non32xferflags}
|
||||
compiler.c.flags=-c "{compiler.warning_flags}-cflags" -std=gnu17 {build.stacksmash_flags} -g -free -fipa-pta -Werror=return-type -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} {build.mmuflags} {build.non32xferflags}
|
||||
|
||||
compiler.S.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls "-I{runtime.tools.xtensa-lx106-elf-gcc.path}/include/"
|
||||
|
||||
compiler.c.elf.flags=-g "{compiler.warning_flags}-cflags" -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/lib/{build.sdk}" "-L{build.path}" "-L{compiler.libc.path}/lib" "-Tlocal.eagle.flash.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read
|
||||
compiler.c.elf.flags=-g "{compiler.warning_flags}-cflags" -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/lib/{build.sdk}" "-L{build.path}" "-L{compiler.libc.path}/lib" "-Tlocal.eagle.flash.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read
|
||||
|
||||
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -lespnow -lsmartconfig -lairkiss -lwpa2 {build.stdcpp_lib} -lm -lc -lgcc
|
||||
|
||||
compiler.cpp.cmd=xtensa-lx106-elf-g++
|
||||
compiler.cpp.flags=-c "{compiler.warning_flags}-cppflags" {build.stacksmash_flags} -Os -g -free -fipa-pta -Werror=return-type -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 {build.stdcpp_level} -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} {build.mmuflags} {build.non32xferflags}
|
||||
compiler.cpp.flags=-c "{compiler.warning_flags}-cppflags" {build.stacksmash_flags} -g -free -fipa-pta -Werror=return-type -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 {build.stdcpp_level} -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags} {build.mmuflags} {build.non32xferflags}
|
||||
|
||||
compiler.as.cmd=xtensa-lx106-elf-as
|
||||
|
||||
|
@ -1045,6 +1045,7 @@ macros = {
|
||||
( '.build.core', 'esp8266' ),
|
||||
( '.build.variant', 'generic' ),
|
||||
( '.build.spiffs_pagesize', '256' ),
|
||||
( '.build.debug_optim', '' ),
|
||||
( '.build.debug_port', '' ),
|
||||
( '.build.debug_level', '' ),
|
||||
]),
|
||||
@ -1360,6 +1361,12 @@ def all_debug ():
|
||||
( '.menu.dbg.Serial1.build.debug_port', '-DDEBUG_ESP_PORT=Serial1' ),
|
||||
( '.menu.lvl.None____', 'None' ),
|
||||
( '.menu.lvl.None____.build.debug_level', '' ),
|
||||
( '.menu.optim.Smallest', 'None' ),
|
||||
( '.menu.optim.Smallest.build.debug_optim', '-Os' ),
|
||||
( '.menu.optim.Lite', 'Lite' ),
|
||||
( '.menu.optim.Lite.build.debug_optim', '-Os -fno-optimize-sibling-calls' ),
|
||||
( '.menu.optim.Full', 'Optimum' ),
|
||||
( '.menu.optim.Full.build.debug_optim', '-Og' ),
|
||||
])
|
||||
|
||||
for optlist in options:
|
||||
@ -1740,6 +1747,7 @@ def all_boards ():
|
||||
print('menu.ResetMethod=Reset Method')
|
||||
print('menu.dbg=Debug port')
|
||||
print('menu.lvl=Debug Level')
|
||||
print('menu.optim=Debug Optimization')
|
||||
print('menu.ip=lwIP Variant')
|
||||
print('menu.vt=VTables')
|
||||
print('menu.exception=C++ Exceptions')
|
||||
|
Loading…
x
Reference in New Issue
Block a user