You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am looking to establish if the below is a bug or somehow misuse of the API as its a slightly nonstandard use case.
I am trying to receive UART data using DMA on uart0 of an ESP32C3. The nonstandard setup is that I have a single buffer to be filled by DMA that I occasionally check on the contents of and process accordingly, rather than the expected dual-buffer setup. This works fine for most things I need to send to the buffer.
However, if I send more data to the uart than the length specified in uart_dma_rx_start(..) the system hangs. I was expecting the uart reception to stop and raise an event, and for the excess data to just go missing. This is what the API docs describe to me in the case where no second buffer is provided. Instead, it appears that the uart_esp32_isr() is continually called and the system cannot process much else.
Running the same code on an STM32 device works fine, the buffer overflows "gracefully" (ie. reception stops after the specified number of bytes) and I can wipe it out and continue waiting for new reception
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
I am looking to establish if the below is a bug or somehow misuse of the API as its a slightly nonstandard use case.
I am trying to receive UART data using DMA on uart0 of an ESP32C3. The nonstandard setup is that I have a single buffer to be filled by DMA that I occasionally check on the contents of and process accordingly, rather than the expected dual-buffer setup. This works fine for most things I need to send to the buffer.
However, if I send more data to the uart than the length specified in uart_dma_rx_start(..) the system hangs. I was expecting the uart reception to stop and raise an event, and for the excess data to just go missing. This is what the API docs describe to me in the case where no second buffer is provided. Instead, it appears that the uart_esp32_isr() is continually called and the system cannot process much else.
Running the same code on an STM32 device works fine, the buffer overflows "gracefully" (ie. reception stops after the specified number of bytes) and I can wipe it out and continue waiting for new reception
Beta Was this translation helpful? Give feedback.
All reactions