summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorMLW <[email protected]>2019-03-03 14:12:01 +0800
committerMLW <[email protected]>2019-03-03 14:12:01 +0800
commit8b18522cfd3f321d52d389c7658a2992d6ea1d2c (patch)
treeb4445682f4b879d1662898627b523115d3a167c6 /components
parent5260e647cb0b0c4a2b2e8c99021dc11ea2f102e4 (diff)
解决_tc_flush可能引起的缓冲区冲突
Diffstat (limited to 'components')
-rw-r--r--components/drivers/serial/serial.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c
index a03e4a719e..094c403656 100644
--- a/components/drivers/serial/serial.c
+++ b/components/drivers/serial/serial.c
@@ -882,6 +882,7 @@ static int _get_baudrate(speed_t speed)
static void _tc_flush(struct rt_serial_device *serial, int queue)
{
+ rt_base_t level;
int ch = -1;
struct rt_serial_rx_fifo *rx_fifo = RT_NULL;
struct rt_device *device = RT_NULL;
@@ -901,10 +902,12 @@ static void _tc_flush(struct rt_serial_device *serial, int queue)
if((device->open_flag & RT_DEVICE_FLAG_INT_RX) || (device->open_flag & RT_DEVICE_FLAG_DMA_RX))
{
RT_ASSERT(RT_NULL != rx_fifo);
+ level = rt_hw_interrupt_disable();
rt_memset(rx_fifo->buffer, 0, serial->config.bufsz);
rx_fifo->put_index = 0;
rx_fifo->get_index = 0;
rx_fifo->is_full = RT_FALSE;
+ rt_hw_interrupt_enable(level);
}
else
{