我正在使用STM32F4xx控制器。 我用DMA来缓冲UART(循环缓冲区)。 我担心的是,如果我的程序在与DMA同时访问相同的内存位置时会出现内存争用。
可以通过这种方式进行争用,还是控制器有措施防止这种情况发生?
感谢。
答案 0 :(得分:1)
我在STM32F401手册中找到了这个:
BusMatrix管理主设备(CPU,DMA)之间的访问仲裁。仲裁使用循环算法。
由于仲裁,DMA(或CPU)可能无法进行转移(在适当的时间)。这会导致欠载/溢出错误(在DMA中,CPU将等待)。
如果由于超限或欠载条件设置了DMEIFx或FEIFx标志,则故障 流不会自动禁用,由软件通过重置DMA_SxCR寄存器中的EN位来禁用或禁用流。这是因为发生此类错误时不会丢失数据。