Skip to content

[BUG] ESP32 crash when using multiple ESP32HWEncoder(s) #473

Open
@AndBondStyle

Description

@AndBondStyle

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...

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions