请问在rt_hw_serial_register函数中,若RT_DEVICE_FLAG_INT_RX和RT_DEVICE_FLAG_DMA_RX均选中,到底是用哪种串口接收方式?中断接收还是DMA接收?谢谢!
static rt_size_t rt_serial_read(struct rt_device *dev,
rt_off_t pos,
void *buffer,
rt_size_t size)
{
struct rt_serial_device *serial;
RT_ASSERT(dev != RT_NULL);
if (size == 0) return 0;
serial = (struct rt_serial_device *)dev;
if (dev->open_flag & RT_DEVICE_FLAG_INT_RX)
{
return _serial_int_rx(serial, (rt_uint8_t *)buffer, size);
}
#ifdef RT_SERIAL_USING_DMA
else if (dev->open_flag & RT_DEVICE_FLAG_DMA_RX)
{
return _serial_dma_rx(serial, (rt_uint8_t *)buffer, size);
}
#endif /* RT_SERIAL_USING_DMA */
return _serial_poll_rx(serial, (rt_uint8_t *)buffer, size);
}
看一下这个代码你应该就明白了。
flags的判断是有优先级的,中断 -> DMA -> 轮询。
如果我的回答解决了你的问题,记得点个采纳哦
那请问为啥有的例程会把两个选项都写上呢?这么写不是毫无意义吗?
@hw75320 这个,你只能去问作者了。