如果在DMA传输期间CPU无法访问总线,则必须等待总线释放,使用DMA如何带来性能优势?
可能存在总线争用,但是它可能比通常由中断驱动的I / O(具有巨大的软件开销)的替代方法更快。通常,DMA传输将不使用最大内存带宽(也许除了内存到内存的传输外),因为外围设备往往比内存慢得多。DMA控制器将交错CPU访问。
此外,总线争用不是给定的,许多微控制器将其内存分段在单独的总线上,因此CPU对一个总线上的内存的访问可以与另一总线上的DMA操作同时发生。例如,哈佛体系结构设备具有用于代码和数据存储器的独立总线,因此可以同时获取操作码和数据,但是减少了数据存储器上的访问负载(因为并非所有指令都需要获取存储操作数),因此具有DMA的优势。
此外,一些微控制器,例如STM32系列中的许多微控制器(Cortex-M,也是哈佛体系结构),将其片上SRAM划分在单独的总线上(以及在单独的总线上的外部存储器接口)。通常,SRAM的某个部分会比其他部分小一些-也许是4K或16K-这是DMA缓冲专用的理想选择。通过避免总线争用,以这种方式使用内存会对性能产生重大影响。
某些STM32部件的另一个功能是内核耦合存储器(CCM),该内核耦合存储器(CCM)不可用于DMA或位带,但如果用于大多数CPU数据处理,则可将其他片上SRAM用于DMA,从而进一步减少了总线争用。
其他微处理器可能具有类似的内存分段。要利用这种内存体系结构,通常需要在代码中使用自定义链接描述文件和可能的链接描述,以识别段并明确为其分配对象。这将是特定于工具链的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句