Embedded 直接内存访问的优势是什么?

Embedded 直接内存访问的优势是什么?,embedded,dma,Embedded,Dma,如果CPU在DMA传输期间无法访问总线,因此必须等待总线释放,那么使用DMA如何提供任何性能优势?可能存在总线争用,但它仍然可能比通常具有巨大软件开销的中断驱动I/O快。通常,DMA传输不会使用最大内存带宽(内存到内存传输除外),因为外围设备往往比内存慢得多。DMA控制器将交错CPU访问 此外,总线争用不是给定的,许多微控制器在单独的总线上分割其内存,因此CPU对一条总线上内存的访问可以与另一条总线上内存中的DMA操作同时发生。例如,哈佛体系结构设备具有独立的代码和数据内存总线,因此可以同时获取

如果CPU在DMA传输期间无法访问总线,因此必须等待总线释放,那么使用DMA如何提供任何性能优势?

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

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

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

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


其他微处理器可能具有类似的内存分段。为了利用这种内存体系结构,您通常需要在代码中使用自定义链接器脚本和可能的链接器指令,以允许识别段并显式地将对象分配给它们。这将是特定于工具链的。

@SamuelLiew:几乎不“基于观点”。你确定你有能力做出决定吗?OP错误地认为,由于存在总线争用,DMA可能没有优势。事实并非如此,这不是意见的问题。嵌入式系统开发人员对这个问题特别感兴趣,但我怀疑这不是您的专业领域?“通常是中断驱动I/O的替代方案”——实际上,这将是编程I/O。请参阅。@sawdust我明白您的观点,但这更一般。我之所以加入“典型”的警告是有原因的;我并不是说它与DMA相反,只是一种替代方案。这是“典型的”,因为轮询的I/O不允许相同的背景/前景处理,所以比较少的替代方案也是如此。