Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 STM32F4xx 控制器。我使用 DMA 来缓冲 UART(循环缓冲区)。我担心的是,当我的程序与 DMA 同时访问相同的内存位置时,是否会出现内存争用。
争用是否会以这种方式发生,或者控制器是否有措施防止这种情况发生?
谢谢。
我在 STM32F401 手册中找到了这个:
BusMatrix 管理主机(CPU、DMA)之间的访问仲裁。仲裁使用循环算法。
由于仲裁,DMA(或 CPU)可能无法(在正确的时间)进行传输。这会导致欠载/溢出错误(在 DMA 中,CPU 将等待)。
如果 DMEIFx 或 FEIFx 标志由于溢出或欠载情况而设置,故障流不会自动禁用,而是由软件通过复位 DMA_SxCR 寄存器中的 EN 位来禁用或不禁用流。这是因为发生此类错误时不会丢失数据。