【发布时间】:2017-03-13 22:46:12
【问题描述】:
我正在使用 STM32F4xx 控制器。 我使用 DMA 来缓冲 UART(循环缓冲区)。 我担心的是,当我的程序与 DMA 同时访问相同的内存位置时,是否会发生内存争用。
是否会以这种方式发生争用,或者控制器有措施防止这种情况发生?
谢谢。
【问题讨论】:
-
争用是什么意思,你认为会发生什么。您可以同时对同一地址进行多笔交易,而内存/外围设备没有理由无法处理。现在肯定有一些例外,但设计良好的芯片会将交易排队,对系统施加背压或使用信用并处理所有交易
-
争用据我了解,是同时访问同一内存位置(两个 DMA 或 DMA + 程序)。这可能会产生一些故障异常。我担心 DMA 是否会停止。这是我想避免的效果。程序可能会读取 DMA 正在填充的相同位置。
-
当 CPU 和 DMA 都试图通过 BusMatrix 访问同一个内存块时,就会发生内存争用 - 它不必位于同一个位置。此外,如果有太多外设通过 DMA 传输太多数据,则可能会发生 DMA 争用。
标签: dma cortex-m contention