温馨提示:本文翻译自stackoverflow.com,查看原文请点击:embedded - What is the advantage of direct memory access?
dma embedded

embedded - 直接内存访问的优点是什么?

发布于 2020-04-22 10:47:06

如果在DMA传输期间CPU无法访问总线,则必须等待总线释放,使用DMA如何带来性能优势?

查看更多

提问者
fariz
被浏览
51
Clifford 2020-02-08 03:57

可能存在总线争用,但是它可能比通常由中断驱动的I / O(具有巨大的软件开销)的替代方法更快。通常,DMA传输不会使用最大内存带宽(也许除了内存到内存的传输外),因为外围设备往往比内存慢得多。DMA控制器将交错 CPU访问。

此外,总线争用不是给定的,许多微控制器在单独的总线上分段其存储器,因此CPU对一条总线上的存储器的访问可以与另一条总线上的DMA操作同时发生。例如,哈佛体系结构设备具有用于代码和数据存储器的独立总线,因此可以同时获取操作码和数据,但是减少了数据存储器上的访问负载(因为并非所有指令都需要获取存储器操作数),因此具有DMA的优势。

此外,一些微控制器,例如STM32系列中的许多微控制器(Cortex-M,也是哈佛架构),将其片上SRAM划分在单独的总线上(以及在单独的总线上的外部存储器接口)。通常,SRAM的某个部分要比其他部分小一些-也许是4K或16K-非常适合DMA缓冲专用。通过避免总线争用,以这种方式使用内存会对性能产生重大影响。

某些STM32部件的另一个功能是内核耦合存储器(CCM),该内核耦合存储器(CCM)不可用于DMA或位带,但如果用于大多数CPU数据处理,则可将其他片上SRAM用于DMA,从而进一步减少了总线争用。

其他微处理器可能具有类似的内存分段。要利用这种内存体系结构,通常需要在代码中使用自定义的链接描述文件和链接描述,以允许识别段和将对象明确分配给它们。这将是特定于工具链的。