This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于Zstack中DMA缓存满的检测方式和处理办法

在 HalUARTInitDMA(void)这个函数当中,程序对DMA传输进行了一些配置,我发现如下两行代码:

// The DMA Tx done is serviced by ISR in order to maintain full thruput.
HAL_DMA_SET_IRQ( ch, HAL_DMA_IRQMASK_ENABLE );

// The DMA is to be polled and shall not issue an IRQ upon completion.
HAL_DMA_SET_IRQ( ch, HAL_DMA_IRQMASK_DISABLE );

这里存在一个问题,当读串口(DMA接收数据)时,DMA缓存满了之后是不产生中断的,也就是说会往DMA缓存里头继续写数据,直到什么时候主函数重新执行到HalUARTPoll()时才会去读取DMA缓存接收到的数据。这种不确定性很有可能导致发生数据的覆盖,请问我可以把使能DMA缓存满触发中断,然后在中断函数里头去执行HalUARTPoll(),这样是不是可以保证DMA接收数据时不会出现数据覆盖的问题?

同理对于写串口,HalUARTWriteDMA是不是无法进行长度大于DMA缓存的数据的写入,我是不是也是可以自行编写一个写函数,而不用保证写串口的时候也不会发生数据覆盖?