Skip to content

Commit 5c23485

Browse files
Ryan-CW-CodeRbb666
authored andcommitted
[components][serial_v2] 写满丢弃策略对dma_ping_buf的处理有误、细节调整
1 parent d64ce33 commit 5c23485

File tree

2 files changed

+8
-46
lines changed

2 files changed

+8
-46
lines changed

bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,6 @@ static void dma_recv_isr(struct rt_serial_device *serial, rt_uint8_t isr_flag)
411411
RT_ASSERT(serial != RT_NULL);
412412
uart = rt_container_of(serial, struct stm32_uart, serial);
413413

414-
recv_len = 0;
415414
counter = __HAL_DMA_GET_COUNTER(&(uart->dma_rx.handle));
416415

417416
if (counter <= uart->dma_rx.remaining_cnt)

components/drivers/serial/dev_serial_v2.c

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -320,36 +320,6 @@ static void rt_serial_update_read_index(struct rt_ringbuffer *rb,
320320
static void rt_serial_update_write_index(struct rt_ringbuffer *rb,
321321
rt_uint16_t length)
322322
{
323-
#ifdef RT_SERIAL_BUF_STRATEGY_DROP
324-
rt_uint16_t space_length;
325-
326-
RT_ASSERT(rb != RT_NULL);
327-
328-
/* whether has enough space */
329-
space_length = rt_ringbuffer_space_len(rb);
330-
331-
/* no space */
332-
if (space_length == 0)
333-
return;
334-
335-
/* drop some data */
336-
if (space_length < length)
337-
length = space_length;
338-
339-
if (rb->buffer_size - rb->write_index > length)
340-
{
341-
/* this should not cause overflow because there is enough space for
342-
* length of data in current mirror */
343-
rb->write_index += length;
344-
return;
345-
}
346-
347-
/* we are going into the other side of the mirror */
348-
rb->write_mirror = ~rb->write_mirror;
349-
rb->write_index = length - (rb->buffer_size - rb->write_index);
350-
return;
351-
352-
#else
353323
rt_uint16_t space_length;
354324
RT_ASSERT(rb != RT_NULL);
355325

@@ -387,7 +357,6 @@ static void rt_serial_update_write_index(struct rt_ringbuffer *rb,
387357
rb->read_index = rb->write_index;
388358
}
389359
return;
390-
#endif /* RT_SERIAL_BUF_STRATEGY_DROP */
391360
}
392361
#endif /* RT_SERIAL_USING_DMA */
393362

@@ -512,11 +481,11 @@ static rt_ssize_t _serial_fifo_rx(struct rt_device *dev,
512481

513482
if (dev->open_flag & RT_SERIAL_RX_BLOCKING)
514483
{
515-
rt_size_t data_len = 0;
484+
rt_size_t data_len;
485+
rt_tick_t now_tick;
516486
rt_size_t rx_bufsz_third = serial->config.rx_bufsz / 2;
517487
rt_int32_t base_rx_timeout = rt_atomic_load(&rx_fifo->rx_timeout);
518488
rt_int32_t rx_timeout = base_rx_timeout;
519-
rt_tick_t now_tick = 0;
520489
rt_tick_t begin_tick = rt_tick_get();
521490

522491
while (1)
@@ -548,7 +517,6 @@ static rt_ssize_t _serial_fifo_rx(struct rt_device *dev,
548517
break;
549518
}
550519

551-
552520
rt_completion_wait(&rx_fifo->rx_cpt, rx_timeout);
553521
if (rx_timeout != RT_WAITING_FOREVER)
554522
{
@@ -668,7 +636,6 @@ static rt_ssize_t _serial_fifo_tx_blocking_buf(struct rt_device *dev,
668636
struct rt_serial_device *serial;
669637
struct rt_serial_tx_fifo *tx_fifo;
670638
rt_base_t level;
671-
rt_size_t send_size = 0;
672639

673640
if (size == 0) return 0;
674641
RT_ASSERT(dev != RT_NULL && buffer != RT_NULL);
@@ -690,10 +657,11 @@ static rt_ssize_t _serial_fifo_tx_blocking_buf(struct rt_device *dev,
690657
return 0;
691658
}
692659

660+
rt_tick_t now_tick;
693661
rt_int32_t base_tx_timeout = rt_atomic_load(&tx_fifo->tx_timeout);
694662
rt_int32_t tx_timeout = base_tx_timeout;
695-
rt_tick_t now_tick = 0;
696663
rt_tick_t begin_tick = rt_tick_get();
664+
rt_size_t send_size = 0;
697665

698666
while (send_size != size)
699667
{
@@ -1967,8 +1935,8 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
19671935
case RT_SERIAL_EVENT_RX_IND:
19681936
case RT_SERIAL_EVENT_RX_DMADONE: {
19691937
struct rt_serial_rx_fifo *rx_fifo;
1970-
rt_size_t rx_length = 0;
1971-
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
1938+
rt_size_t rx_length;
1939+
rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
19721940
RT_ASSERT(rx_fifo != RT_NULL);
19731941

19741942
#ifdef RT_SERIAL_USING_DMA
@@ -1985,16 +1953,15 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
19851953
rt_size_t space_len;
19861954
/* UART_IT_IDLE and dma isr */
19871955
level = rt_spin_lock_irqsave(&serial->spinlock);
1988-
rt_serial_update_write_index(&rx_fifo->dma_ping_rb, rx_length);
19891956
do
19901957
{
19911958
space_len = rt_ringbuffer_space_len(&rx_fifo->rb);
19921959
if (space_len == 0)
19931960
break;
19941961

1962+
rt_serial_update_write_index(&rx_fifo->dma_ping_rb, rx_length);
1963+
19951964
size = rt_ringbuffer_peek(&rx_fifo->dma_ping_rb, &ptr);
1996-
if (size == 0)
1997-
break;
19981965

19991966
space_len -= rt_ringbuffer_put(&rx_fifo->rb, ptr, size);
20001967
if (space_len == 0)
@@ -2006,8 +1973,6 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
20061973

20071974
rt_ringbuffer_put(&rx_fifo->rb, ptr, size);
20081975
} while (0);
2009-
if (space_len == 0)
2010-
rt_serial_update_read_index(&rx_fifo->dma_ping_rb, rt_ringbuffer_get_size(&rx_fifo->dma_ping_rb));
20111976
rt_spin_unlock_irqrestore(&serial->spinlock, level);
20121977
#else
20131978
rt_uint8_t *ptr;
@@ -2018,8 +1983,6 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
20181983
do
20191984
{
20201985
size = rt_ringbuffer_peek(&rx_fifo->dma_ping_rb, &ptr);
2021-
if (size == 0)
2022-
break;
20231986

20241987
rt_ringbuffer_put_force(&rx_fifo->rb, ptr, size);
20251988

0 commit comments

Comments
 (0)