diff options
| author | MLW <[email protected]> | 2019-03-03 14:12:01 +0800 |
|---|---|---|
| committer | MLW <[email protected]> | 2019-03-03 14:12:01 +0800 |
| commit | 8b18522cfd3f321d52d389c7658a2992d6ea1d2c (patch) | |
| tree | b4445682f4b879d1662898627b523115d3a167c6 /components/drivers | |
| parent | 5260e647cb0b0c4a2b2e8c99021dc11ea2f102e4 (diff) | |
解决_tc_flush可能引起的缓冲区冲突
Diffstat (limited to 'components/drivers')
| -rw-r--r-- | components/drivers/serial/serial.c | 3 |
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 { |
