Shutting down RMT w/ infinite transmission

DrMickeyLauer
Posts: 209
Joined: Sun May 22, 2022 2:42 pm

Shutting down RMT w/ infinite transmission

Postby DrMickeyLauer » Fri Aug 01, 2025 1:54 pm

I get a runtime crash when trying to rx_disable a channel which has an ongoing infinite transmission:

Code: Select all

 bt
#0  0x40374400 in _init ()
#1  0x42038f77 in rmt_encoder_reset (encoder=0x3c2211dc) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/esp_driver_rmt/src/rmt_encoder.c:515
#2  0x4203a499 in rmt_tx_disable (channel=0x3c220f40) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/esp_driver_rmt/src/rmt_tx.c:863
#3  0x42038eba in rmt_disable (channel=0x3c220f40) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/esp_driver_rmt/src/rmt_common.c:327
#4  0x42014f2d in ESPenlaub::RMTChannel::~RMTChannel (this=0x3fcb71ac, __in_chrg=<optimized out>) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/ESP32/RMT/RMTChannel.hpp:53
#5  0x4201531c in ESPenlaub::RMTTxChannel::~RMTTxChannel (this=0x3fcb71ac, __in_chrg=<optimized out>) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/ESP32/RMT/RMTChannel.hpp:95
#6  std::_Optional_payload_base<ESPenlaub::RMTTxChannel>::_M_destroy (this=0x3fcb71ac) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/optional:283
#7  std::_Optional_payload_base<ESPenlaub::RMTTxChannel>::_M_reset (this=0x3fcb71ac) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/optional:314
#8  0x4201df39 in std::_Optional_payload<ESPenlaub::RMTTxChannel, false, false, false>::~_Optional_payload (this=0x3fcb71ac, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/optional:437
#9  std::_Optional_base<ESPenlaub::RMTTxChannel, false, false>::~_Optional_base (this=0x3fcb71ac, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/optional:508
#10 std::optional<ESPenlaub::RMTTxChannel>::~optional (this=0x3fcb71ac, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/optional:703
#11 ESPenlaub::RMTTransmitterTask::~RMTTransmitterTask (this=0x3fcb7168, __in_chrg=<optimized out>) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/ESP32/RMTTransmitterTask.cpp:70
#12 0x4201df48 in ESPenlaub::RMTTransmitterTask::~RMTTransmitterTask (this=0x3fcb7168, __in_chrg=<optimized out>) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/ESP32/RMTTransmitterTask.cpp:70
#13 0x420d4a66 in std::default_delete<ESPenlaub::RMTTransmitterTask>::operator() (this=<optimized out>, __ptr=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:87
#14 std::unique_ptr<ESPenlaub::RMTTransmitterTask, std::default_delete<ESPenlaub::RMTTransmitterTask> >::~unique_ptr (this=0x3fcb715c, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:398
#15 0x4201d6d1 in ESPenlaub::RMTPulseEmitter::~RMTPulseEmitter (this=0x3fcb714c, __in_chrg=<optimized out>) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/ESP32/RMTPulseEmitter.cpp:27
#16 0x420181da in std::default_delete<ESPenlaub::RMTPulseEmitter>::operator() (this=0x3fcb73d4, __ptr=0x3fcb714c) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:93
#17 0x4201820c in std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> >::~unique_ptr (this=0x3fcb73d4, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/tuple:133
#18 0x4201822c in std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >::~pair (this=0x3fcb73d0, __in_chrg=<optimized out>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_pair.h:284
#19 std::destroy_at<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > (__location=0x3fcb73d0) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_construct.h:88
#20 std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > > >::destroy<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > (__a=..., __p=0x3fcb73d0) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/alloc_traits.h:556
#21 std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::_M_destroy_node (this=0x3fca72c0 <(anonymous namespace)::emitters>, __p=0x3fcb73c0) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:621
#22 std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::_M_drop_node (this=0x3fca72c0 <(anonymous namespace)::emitters>, __p=0x3fcb73c0) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:629
#23 std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::_M_erase (this=0x3fca72c0 <(anonymous namespace)::emitters>, __x=0x3fcb73c0) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:1934
#24 0x4201857c in std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::clear (this=0x3fca72c0 <(anonymous namespace)::emitters>) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:732
#25 0x420185e0 in std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::_M_erase_aux (this=0x3fca72c0 <(anonymous namespace)::emitters>, __first={first = 4, second = std::unique_ptr<ESPenlaub::RMTPulseEmitter> = {get() = 0x3fcb714c}}, __last={first = 1, second = std::unique_ptr<ESPenlaub::RMTPulseEmitter> = {get() = 0x0}}) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:2503
#26 0x42018618 in std::_Rb_tree<int, std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > >, std::_Select1st<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::erase (this=0x3fca72c0 <(anonymous namespace)::emitters>, __x=@0x3fcb6c14: 4) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_tree.h:346
#27 0x4201875f in std::map<int, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> >, std::less<int>, std::allocator<std::pair<int const, std::unique_ptr<ESPenlaub::RMTPulseEmitter, std::default_delete<ESPenlaub::RMTPulseEmitter> > > > >::erase (this=0x3fca72c0 <(anonymous namespace)::emitters>, __x=@0x3fcb6c14: 4) at /home/mickey/.espressif/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/stl_map.h:1118
#28 rmtpulse_cmd (argc=<optimized out>, argv=0x3c220ebc) at /home/mickey/Dokumente/late/boxos/3rdparty/ESPenlaub/examples/hwtest/main/PULSE/RMTPulseCommand.cpp:80
#29 0x42023e5e in esp_console_run (cmdline=<optimized out>, cmd_ret=0x3fcb6c70) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/console/commands.c:257
#30 0x420240a5 in esp_console_repl_task (args=0x3fcb47f8) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/console/esp_console_common.c:177
#31 0x40382b10 in vPortTaskWrapper (pxCode=0x42023fc4 <esp_console_repl_task>, pvParameters=0x3fcb47f8) at /home/mickey/Dokumente/late/boxos/3rdparty/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:139
My shutdown code used to be

Code: Select all

    virtual ~RMTChannel() {
        if (handle_) {
            ESP_LOGD(LOG_TAG, "Releasing RMT channel");
            rmt_disable(handle_);            
            rmt_del_channel(handle_);
            handle_ = nullptr;
        }
which works fine in all other cases.

Who is online

Users browsing this forum: No registered users and 11 guests