From d23006ea4ff0c5d2619775221d7bf9630b3d19e1 Mon Sep 17 00:00:00 2001 From: ryancw <1831931681@qq.com> Date: Mon, 21 Jul 2025 20:44:46 +0800 Subject: [PATCH] =?UTF-8?q?[drivers][serial=5Fv2]=20=E4=BF=AE=E5=A4=8Ddma?= =?UTF-8?q?=E4=B8=8Brx=5Fflush=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/serial/dev_serial_v2.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c index 488943df2f..dc09da1f69 100644 --- a/components/drivers/serial/dev_serial_v2.c +++ b/components/drivers/serial/dev_serial_v2.c @@ -943,7 +943,7 @@ static rt_err_t rt_serial_rx_enable(struct rt_device *dev, serial->config.rx_bufsz = RT_SERIAL_RX_MINBUFSZ; #ifdef RT_SERIAL_USING_DMA - if (serial->config.dma_ping_bufsz > 0 && serial->config.dma_ping_bufsz < RT_SERIAL_RX_MINBUFSZ / 2) + if (serial->config.dma_ping_bufsz < RT_SERIAL_RX_MINBUFSZ / 2) serial->config.dma_ping_bufsz = RT_SERIAL_RX_MINBUFSZ / 2; rx_fifo_size = sizeof(struct rt_serial_rx_fifo) + serial->config.rx_bufsz + serial->config.dma_ping_bufsz; #else @@ -959,12 +959,9 @@ static rt_err_t rt_serial_rx_enable(struct rt_device *dev, serial->config.rx_bufsz); #ifdef RT_SERIAL_USING_DMA - if (serial->config.dma_ping_bufsz > 0) - { - rt_ringbuffer_init(&rx_fifo->dma_ping_rb, - (rt_uint8_t *)rx_fifo + sizeof(struct rt_serial_rx_fifo) + serial->config.rx_bufsz, - serial->config.dma_ping_bufsz); - } + rt_ringbuffer_init(&rx_fifo->dma_ping_rb, + (rt_uint8_t *)rx_fifo + sizeof(struct rt_serial_rx_fifo) + serial->config.rx_bufsz, + serial->config.dma_ping_bufsz); #endif serial->serial_rx = rx_fifo; @@ -1219,10 +1216,7 @@ static void _serial_rx_flush(struct rt_serial_device *serial) rt_ringbuffer_reset(&rx_fifo->rb); rx_fifo->rx_cpt_index = 0; #ifdef RT_SERIAL_USING_DMA - if (serial->config.dma_ping_bufsz > 0) - { - rt_ringbuffer_reset(&rx_fifo->dma_ping_rb); - } + rt_serial_update_read_index(&rx_fifo->dma_ping_rb, rt_ringbuffer_get_size(&rx_fifo->dma_ping_rb)); #endif rt_spin_unlock_irqrestore(&serial->spinlock, level); }