0

我正在使用 STM32F4xx 控制器。我使用 DMA 来缓冲 UART(循环缓冲区)。我担心的是,当我的程序与 DMA 同时访问相同的内存位置时,是否会出现内存争用。

争用是否会以这种方式发生,或者控制器是否有措施防止这种情况发生?

谢谢。

4

1 回答 1

1

我在 STM32F401 手册中找到了这个:

BusMatrix 管理主机(CPU、DMA)之间的访问仲裁。仲裁使用循环算法。

由于仲裁,DMA(或 CPU)可能无法(在正确的时间)进行传输。这会导致欠载/溢出错误(在 DMA 中,CPU 将等待)。

如果 DMEIFx 或 FEIFx 标志由于溢出或欠载情况而设置,故障流不会自动禁用,而是由软件通过复位 DMA_SxCR 寄存器中的 EN 位来禁用或不禁用流。这是因为发生此类错误时不会丢失数据。

于 2017-03-21T02:30:44.837 回答