当cpu释放所有系统总线以进行dma(直接内存访问)传输时,实际上没有cpu操作,因为没有可用的总线?那么使用dmac有什么好处?
可能存在总线争用,但仍可能比通常由中断驱动的I / O替代方案要快,后者具有巨大的软件开销。
此外,总线争用不是给定的,许多微控制器在单独的总线上分段其存储器,因此CPU对一个总线上的存储器的访问可以与另一总线上的DMA操作同时发生。例如,哈佛架构设备具有用于代码和数据存储器的独立总线,因此可以同时获取操作码和数据,但是由于DMA减少了数据存储器上的访问负载,因此具有优势。
此外,某些微控制器,例如STM32系列中的许多微控制器(Cortex-M,也是哈佛架构),将其片上SRAM划分在独立的总线上(以及在独立的总线上的外部存储器接口)。通常,SRAM的某个部分要比其他部分小一些-也许是4K或16K-非常适合DMA缓冲专用。以这种方式使用内存可以避免总线争用,从而对性能产生重大影响。
某些STM32部件的另一个功能是核心耦合存储器
(CCM),它不适用于DMA或位带,但是如果用于大多数CPU数据处理,则可以将其他片上SRAM用于DMA,这进一步减少了总线争用。其他微电子产品可能具有类似的内存分段。要利用这种内存体系结构,通常需要在代码中使用自定义的链接描述文件和链接描述,以允许识别段和将对象明确分配给它们。这将是特定于工具链的。