@@ -320,36 +320,6 @@ static void rt_serial_update_read_index(struct rt_ringbuffer *rb,
320320static 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