Przeglądaj źródła

[DeviceDrivers] add warning about overflow by serial receiver

Ernest 5 lat temu
rodzic
commit
f82d4f1f6f
1 zmienionych plików z 15 dodań i 0 usunięć
  1. 15 0
      components/drivers/serial/serial.c

+ 15 - 0
components/drivers/serial/serial.c

@@ -327,6 +327,18 @@ rt_inline int _serial_int_tx(struct rt_serial_device *serial, const rt_uint8_t *
     return size - length;
 }
 
+static void _serial_check_buffer_size(void)
+{
+    static rt_bool_t already_output = RT_FALSE;
+		
+    if (already_output == RT_FALSE)
+    {
+        LOG_W("Warning: There is no enough buffer for saving data,"
+              " please increase the RT_SERIAL_RB_BUFSZ option.");
+        already_output = RT_TRUE;
+    }
+}	
+
 #if defined(RT_USING_POSIX) || defined(RT_SERIAL_USING_DMA)
 static rt_size_t _serial_fifo_calc_recved_len(struct rt_serial_device *serial)
 {
@@ -430,6 +442,7 @@ static void rt_dma_recv_update_put_index(struct rt_serial_device *serial, rt_siz
     
     if(rx_fifo->is_full == RT_TRUE)
     {
+        _serial_check_buffer_size();
         rx_fifo->get_index = rx_fifo->put_index;
     }
 }
@@ -1170,6 +1183,8 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
                     rx_fifo->get_index += 1;
                     rx_fifo->is_full = RT_TRUE;
                     if (rx_fifo->get_index >= serial->config.bufsz) rx_fifo->get_index = 0;
+
+                    _serial_check_buffer_size();
                 }
 
                 /* enable interrupt */