gin66 / FastAccelStepper

A high speed stepper library for Atmega 168/328p (nano), Atmega32u4, Atmega 2560, ESP32, ESP32S2, ESP32S3, ESP32C3 and Atmel SAM Due
MIT License
286 stars 67 forks source link

Compilation error 'rmt_chn_tx_lim_reg_t' has no member named 'limit' on Lolin S2 (ESP32S2) #144

Closed atuchin-m closed 1 year ago

atuchin-m commented 1 year ago
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In function 'void tx_intr_handler(void*)':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:186:23: error: 'volatile union rmt_chn_tx_lim_reg_t' has no member named 'limit'
     RMT.tx_lim_ch[ch].limit = PART_SIZE * 2 + 1; \

.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In member function 'void StepperQueue::init_rmt(uint8_t, uint8_t)':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:236:18: error: 'volatile union rmt_apb_conf_reg_t' has no member named 'fifo_mask'
     RMT.apb_conf.fifo_mask = 1;
                  ^~~~~~~~~

I believe the reason is for ESP32S2 some structs are different: ESP32: https://github.com/espressif/esp-idf/blob/master/components/soc/esp32s2/include/soc/rmt_struct.h ESP32S2: https://github.com/espressif/esp-idf/blob/master/components/soc/esp32/include/soc/rmt_struct.h Full log:

Compiling .pio/build/lolin_s2_mini/FrameworkArduino/cbuf.cpp.o
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In function 'void apply_command(StepperQueue*, bool, uint32_t*)':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:61:35: warning: 'esp_err_t rmt_memory_rw_rst(rmt_channel_t)' is deprecated: use rmt_tx_memory_reset or rmt_rx_memory_reset instead [-Wdeprecated-declarations]
       rmt_memory_rw_rst(q->channel);
                                   ^
In file included from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/common.h:123,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/FastAccelStepper.h:5,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR.h:3,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:1:
/Users/mikhail/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s2/include/driver/include/driver/rmt.h:898:11: note: declared here
 esp_err_t rmt_memory_rw_rst(rmt_channel_t channel)
           ^~~~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:61:35: warning: 'esp_err_t rmt_memory_rw_rst(rmt_channel_t)' is deprecated: use rmt_tx_memory_reset or rmt_rx_memory_reset instead [-Wdeprecated-declarations]
       rmt_memory_rw_rst(q->channel);
                                   ^
In file included from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/common.h:123,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/FastAccelStepper.h:5,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR.h:3,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:1:
/Users/mikhail/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s2/include/driver/include/driver/rmt.h:898:11: note: declared here
 esp_err_t rmt_memory_rw_rst(rmt_channel_t channel)
           ^~~~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In function 'void tx_intr_handler(void*)':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:186:23: error: 'volatile union rmt_chn_tx_lim_reg_t' has no member named 'limit'
     RMT.tx_lim_ch[ch].limit = PART_SIZE * 2 + 1; \
                       ^~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:193:3: note: in expansion of macro 'PROCESS_CHANNEL'
   PROCESS_CHANNEL(0);
   ^~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:186:23: error: 'volatile union rmt_chn_tx_lim_reg_t' has no member named 'limit'
     RMT.tx_lim_ch[ch].limit = PART_SIZE * 2 + 1; \
                       ^~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:194:3: note: in expansion of macro 'PROCESS_CHANNEL'
   PROCESS_CHANNEL(1);
   ^~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:186:23: error: 'volatile union rmt_chn_tx_lim_reg_t' has no member named 'limit'
     RMT.tx_lim_ch[ch].limit = PART_SIZE * 2 + 1; \
                       ^~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:196:3: note: in expansion of macro 'PROCESS_CHANNEL'
   PROCESS_CHANNEL(2);
   ^~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:186:23: error: 'volatile union rmt_chn_tx_lim_reg_t' has no member named 'limit'
     RMT.tx_lim_ch[ch].limit = PART_SIZE * 2 + 1; \
                       ^~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:197:3: note: in expansion of macro 'PROCESS_CHANNEL'
   PROCESS_CHANNEL(3);
   ^~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In member function 'void StepperQueue::init_rmt(uint8_t, uint8_t)':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:236:18: error: 'volatile union rmt_apb_conf_reg_t' has no member named 'fifo_mask'
     RMT.apb_conf.fifo_mask = 1;
                  ^~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp: In member function 'void StepperQueue::startQueue_rmt()':
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:274:28: warning: 'esp_err_t rmt_memory_rw_rst(rmt_channel_t)' is deprecated: use rmt_tx_memory_reset or rmt_rx_memory_reset instead [-Wdeprecated-declarations]
   rmt_memory_rw_rst(channel);
                            ^
In file included from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/common.h:123,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/FastAccelStepper.h:5,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR.h:3,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:1:
/Users/mikhail/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s2/include/driver/include/driver/rmt.h:898:11: note: declared here
 esp_err_t rmt_memory_rw_rst(rmt_channel_t channel)
           ^~~~~~~~~~~~~~~~~
.pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:274:28: warning: 'esp_err_t rmt_memory_rw_rst(rmt_channel_t)' is deprecated: use rmt_tx_memory_reset or rmt_rx_memory_reset instead [-Wdeprecated-declarations]
   rmt_memory_rw_rst(channel);
                            ^
In file included from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/common.h:123,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/FastAccelStepper.h:5,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR.h:3,
                 from .pio/libdeps/lolin_s2_mini/FastAccelStepper/src/StepperISR_esp32_rmt.cpp:1:
/Users/mikhail/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s2/include/driver/include/driver/rmt.h:898:11: note: declared here
 esp_err_t rmt_memory_rw_rst(rmt_channel_t channel)
           ^~~~~~~~~~~~~~~~~
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-adc.c.o
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-bt.c.o
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-cpu.c.o
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-dac.c.o
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-gpio.c.o
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-i2c-slave.c.o
*** [.pio/build/lolin_s2_mini/lib7e6/FastAccelStepper/StepperISR_esp32_rmt.cpp.o] Error 1
Compiling .pio/build/lolin_s2_mini/FrameworkArduino/esp32-hal-i2c.c.o
atuchin-m commented 1 year ago

It seems manual actions with tx_lim_ch should be changed to stable public API: https://github.com/espressif/esp-idf/blob/3cb4db60b2c2889daa82e20eed09105a835d98f1/components/hal/esp32s2/include/hal/rmt_ll.h#L333

atuchin-m commented 1 year ago

Replacing to rmt_ll_tx_set_limit(&RMT, ch, PART_SIZE * 2 + 1); & rmt_ll_enable_mem_access(&RMT, true); works for me.

gin66 commented 1 year ago

could you please create a PR?

gin66 commented 1 year ago

The strange thing is, that compiling with esp32s2 latest in GitHub actions works....

As the latest changes were not released. I have now bumped to 0.28.0 Perhaps the latest version is ok ?