Open
Description
ESP32 crashes when trying to initialize the second instance of ESP32HWEncoder.
main.cpp
#include "encoders/esp32hwencoder/ESP32HWEncoder.h"
const int ENCODER_CPR = 1234;
ESP32HWEncoder sensor1 = ESP32HWEncoder(16, 17, ENCODER_CPR);
ESP32HWEncoder sensor2 = ESP32HWEncoder(18, 19, ENCODER_CPR);
void setup() {
sensor1.init();
sensor2.init(); // <-- crash
}
void loop() { }
platformio.ini
[env:esp32dev]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip
board = esp32dev
framework = arduino
lib_deps = simplefoc/SimpleFOCDrivers@^1.0.8
monitor_speed = 115200
monitor_filters = esp32_exception_decoder
pio pkg list
Platform espressif32 @ 54.3.20 (required: https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip)
├── framework-arduinoespressif32 @ 3.2.0 (required: https://github.com/espressif/arduino-esp32/releases/download/3.2.0/esp32-3.2.0.zip)
├── framework-arduinoespressif32-libs @ 5.4.0+sha.2f7dcd862a (required: https://github.com/espressif/esp32-arduino-lib-builder/releases/download/idf-release_v5.4/esp32-arduino-libs-idf-release_v5.4-2f7dcd86-v1.zip)
├── tool-esptoolpy @ 4.8.9 (required: https://github.com/pioarduino/esptool/releases/download/v4.8.9/esptool.zip)
├── tool-mkfatfs @ 2.0.1 (required: platformio/tool-mkfatfs @ ~2.0.0)
├── tool-mklittlefs @ 3.2.0 (required: tasmota/tool-mklittlefs @ ^3.2.0)
├── tool-mkspiffs @ 2.230.0 (required: platformio/tool-mkspiffs @ ~2.230.0)
├── tool-riscv32-esp-elf-gdb @ 14.2.0+20240403 (required: platformio/tool-riscv32-esp-elf-gdb @ 14.2.0+20240403)
├── tool-xtensa-esp-elf-gdb @ 14.2.0+20240403 (required: platformio/tool-xtensa-esp-elf-gdb @ 14.2.0+20240403)
└── toolchain-xtensa-esp-elf @ 14.2.0+20241119 (required: platformio/toolchain-xtensa-esp-elf @ 14.2.0+20241119)
Libraries
└── SimpleFOCDrivers @ 1.0.8 (required: simplefoc/SimpleFOCDrivers @ ^1.0.8)
│ └── Simple FOC @ 2.3.4 (required: Simple FOC)
crash log
abort() was called at PC 0x40083e83 on core 1
Backtrace: 0x400833c0:0x3ffb1bf0 0x40087b01:0x3ffb1c10 0x4008d559:0x3ffb1c30 0x40083e83:0x3ffb1cb0 0x40083fb9:0x3ffb1ce0 0x4008403d:0x3ffb1d00 0x400ec463:0x3ffb1d30 0x400e5d21:0x3ffb2050 0x400f3bf9:0x3ffb2080 0x400e1825:0x3ffb20b0 0x400e1851:0x3ffb20e0 0x400d9051:0x3ffb2130 0x400d91d9:0x3ffb21b0 0x400de729:0x3ffb21e0 0x400d18ad:0x3ffb2210 0x400d1764:0x3ffb2250 0x400d2526:0x3ffb2270 0x400883dd:0x3ffb2290
#0 0x400833c0 in panic_abort at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_system/panic.c:454
#1 0x40087b01 in esp_system_abort at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_system/port/esp_system_chip.c:87
#2 0x4008d559 in abort at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/newlib/abort.c:38
#3 0x40083e83 in lock_acquire_generic at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/newlib/locks.c:133
#4 0x40083fb9 in _lock_acquire_recursive at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/newlib/locks.c:162
#5 0x4008403d in __retarget_lock_acquire_recursive at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/newlib/locks.c:321
#6 0x400ec463 in _vfprintf_r at /builds/idf/crosstool-NG/.build/xtensa-esp-elf/src/newlib/newlib/libc/stdio/vfprintf.c:846 (discriminator 2)
#7 0x400e5d21 in vprintf at /builds/idf/crosstool-NG/.build/xtensa-esp-elf/src/newlib/newlib/libc/stdio/vprintf.c:34
#8 0x400f3bf9 in esp_log_writev at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/log/src/os/log_write.c:34
#9 0x400e1825 in __wrap_esp_log_writev at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/managed_components/espressif__esp_diagnostics/src/esp_diagnostics_log_hook.c:468
#10 0x400e1851 in __wrap_esp_log_write at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/managed_components/espressif__esp_diagnostics/src/esp_diagnostics_log_hook.c:478
#11 0x400d9051 in esp_intr_alloc_intrstatus at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_hw_support/intr_alloc.c:577 (discriminator 1)
#12 0x400d91d9 in esp_intr_alloc at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp_hw_support/intr_alloc.c:697
#13 0x400de729 in pcnt_isr_register at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/driver/deprecated/pcnt_legacy.c:533
#14 0x400d18ad in ESP32HWEncoder::init() at .pio/libdeps/esp32dev/SimpleFOCDrivers/src/encoders/esp32hwencoder/ESP32HWEncoder.cpp:111
#15 0x400d1764 in setup() at src/main.cpp:9
#16 0x400d2526 in loopTask(void*) at /home/abs/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:59
#17 0x400883dd in vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:139
ELF file SHA256: b00335813
Rebooting...
possibly related warnings in build log
In file included from .pio/libdeps/esp32dev/SimpleFOCDrivers/src/encoders/esp32hwencoder/ESP32HWEncoder.h:9,
from .pio/libdeps/esp32dev/SimpleFOCDrivers/src/encoders/esp32hwencoder/ESP32HWEncoder.cpp:1:
/home/abs/.platformio/packages/framework-arduinoespressif32-libs/esp32/include/driver/deprecated/driver/pcnt.h:15:2: warning: #warning "legacy pcnt driver is deprecated, please migrate to use driver/pulse_cnt.h" [-Wcpp]
15 | #warning "legacy pcnt driver is deprecated, please migrate to use driver/pulse_cnt.h"
| ^~~~~~~
.pio/libdeps/esp32dev/SimpleFOCDrivers/src/encoders/esp32hwencoder/ESP32HWEncoder.cpp:60:45: warning: ignoring attribute 'section (".iram1.2")' because it conflicts with previous 'section (".iram1.0")' [-Wattributes]
60 | void IRAM_ATTR ESP32HWEncoder::indexHandler()
| ^
.pio/libdeps/esp32dev/SimpleFOCDrivers/src/encoders/esp32hwencoder/ESP32HWEncoder.h:50:24: note: previous declaration here
50 | void IRAM_ATTR indexHandler();
| ^~~~~~~~~~~~
Obviously I'm not using official arduino-esp32 core, but the latest version of pioarduino
instead. I figured this is the current preferred way to have both ESP-IDF v5+ (required by Simple FOC) and arduino under platformio.
If I understood correctly, pioarduino is actually a clever mirror package to get the latest arduino core from espressif...