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