Testing esp-wrover-kit debugging on OSX. The project has the following PlatformIO configuration
[env:esp-wrover-kit]
platform = espressif32
board = esp-wrover-kit
framework = arduino
build_unflags = -std=gnu++11
build_flags = -std=gnu++2a
monitor_speed = 9600
monitor_filters = esp32_exception_decoder
build_type = debug
debug_tool = ftdi
debug_speed = 9600
debug_init_break = break setup
Using a simple Hello World project. If build_unflags = -std=gnu++11 is removed from the above configuration, the debugger stops at the breakpoint as expected. But c++17 functions cannot be compiled.
But if build_unflags = -std=gnu++11 is included, the debugger initialization fails with:
Error: JTAG scan chain interrogation failed: all ones
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway…
Error: esp32.cpu0: IR capture error; saw 0x1f not 0x01
The reason why build_unflags is included is to support c++17 functions such as:
inline variables
std::optional is a template class
Why does JTAG fail with the setting build_unflags = -std=gnu++11, what would be the recommended solution to solve it?
debug_tool = ftdi
possibly ftdi is dependent on ++11, and once removed, is not supported any more. If that is the case, maybe option is to switch to different debugger, that supports ++17
Another note, when PlatformIO.ini has following configuration:
; build_unflags = -std=gnu++11 // commented out
build_flags = -std=gnu++2a
VSCode IDE detects optional template and locates in the .platformio/packages as expected.
Yet, Compiler throws an error.
error: ‘optional’ does not name a type; did you mean ‘optind’?
Noted that during compilation .platformio/packages builds following:
-
.platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/5.2.0
Do not have optional template
-
.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/12.2.0
Do have optional template
-
.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r1/xtensa-esp32-elf/include/c++/8.4.0
Do have optional template
-
.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/xtensa-esp32-elf/include/c++/8.4.0
Do have optional template
When PlatformIO.ini has gnu++ removed
build_unflags = -std=gnu++11
Compilation is successful
So it looks like, that for some reason compiler picks the first toolchain-xtensa that does not have optional template.