Stm32 当数据量较小时,内存到内存的DMA传输是否存在折衷?

Stm32 当数据量较小时,内存到内存的DMA传输是否存在折衷?,stm32,stm32f4,Stm32,Stm32f4,我正在学习STM32 F4微控制器。我试图找出使用DMA的限制 根据我的理解和研究,我知道如果数据大小很小,即设备使用DMA生成或消耗少量数据,则开销会增加,因为DMA传输需要DMA控制器执行操作,从而不必要地增加系统成本 我做了一些研究,发现如下: DMA的局限性 CPU将其所有线路置于高阻抗状态,这样DMA控制器就可以在设备和内存之间直接传输数据,而无需CPU干预。显然,它更适合像磁盘这样具有高数据传输速率的设备。 通过串行接口,数据一次传输一位,这使得DMA的使用速度变慢 对吗?我还需要知

我正在学习STM32 F4微控制器。我试图找出使用DMA的限制

根据我的理解和研究,我知道如果数据大小很小,即设备使用DMA生成或消耗少量数据,则开销会增加,因为DMA传输需要DMA控制器执行操作,从而不必要地增加系统成本

我做了一些研究,发现如下:

DMA的局限性

CPU将其所有线路置于高阻抗状态,这样DMA控制器就可以在设备和内存之间直接传输数据,而无需CPU干预。显然,它更适合像磁盘这样具有高数据传输速率的设备。 通过串行接口,数据一次传输一位,这使得DMA的使用速度变慢


对吗?我还需要知道什么?

正如@Vinci和@0\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuf.k.a.@p\uuuuj\uuuuu已经指出的那样

DMA控制器是自主工作的,不会在它补充的CPU上产生开销,至少它本身不会。但是:

CPU/软件必须执行一些指令来配置DMA并触发它,或者由一些外围设备触发它。为此,它需要CPU时间和程序内存空间,通常是ROM。此外,它通常需要一些额外的变量RAM来管理DMA周围的软件

因此,您是对的,使用DMA会带来一些开销

而且,

DMA传输利用内存总线将相关内存/寄存器/外围设备连接到DMA控制器。也就是说,当DMA控制器自行工作时,它可能会导致它试图卸载的CPU在此期间暂停,至少在传输数据字时暂停片刻,而这些数据字又会导致更长的传输。。。。
另一方面,DMA不仅可以帮助您减少CPU负载,减少实现某些功能所需的CPU总时间。如果以智能的方式使用,它可以帮助您减少软件延迟以实现不同的功能,因为实现的一部分可以隐藏在另一部分的DMA驱动数据传输后面,除非两者都依赖相同的总线资源-见上文…

正如@Vinci和@0\uuuuuuuuuuuuuuuuuuuuuuuuuuuu.k.a.@p\u J\uuuuuuuu已经指出的那样

DMA控制器是自主工作的,不会在它补充的CPU上产生开销,至少它本身不会。但是:

CPU/软件必须执行一些指令来配置DMA并触发它,或者由一些外围设备触发它。为此,它需要CPU时间和程序内存空间,通常是ROM。此外,它通常需要一些额外的变量RAM来管理DMA周围的软件

因此,您是对的,使用DMA会带来一些开销

而且,

DMA传输利用内存总线将相关内存/寄存器/外围设备连接到DMA控制器。也就是说,当DMA控制器自行工作时,它可能会导致它试图卸载的CPU在此期间暂停,至少在传输数据字时暂停片刻,而这些数据字又会导致更长的传输。。。。 另一方面,DMA不仅可以帮助您减少CPU负载,减少实现某些功能所需的CPU总时间。如果以智能方式使用,它可以帮助您减少软件延迟以实现不同的功能,因为实现的一部分可以隐藏在另一部分DMA驱动的数据传输后面,除非,两者都依赖于相同的总线资源-参见上文…

信息正确,使用DMA需要一些开发工作和运行时来管理DMA传输本身,参见 在这里,这可能不值得使用DMA的好处。也就是说,对于一小部分数据,其性能或延迟不如在大传输期间。在嵌入式系统中,DMA控制器和它们的信道是有限的资源,因此重要的是要考虑函数的哪一部分最受益于这样的资源。因此,如果是关于负载数据,例如通过慢速串行连接传输的大文件或视频流,则通常更倾向于使用DMA进行与磁盘之间的数据传输

然而,这些信息是错误的,因为DMA不值得在串行接口上使用,因为串行接口一次只传输一个位。请注意,微控制器作为您的 具有内置的外围组件,可将串行逐位流转换为逐字节或逐字流,可通过DMA以一种有用的方式轻松传输,尤其是在数据包大小事先已知且软件无需分析非格式化流的情况下。此外,并非所有串行连接都很慢。如果项目使用,e。g、 ,一个SPI闪存芯片,则SPI串行连接用于数据传输。

信息 这种说法是正确的,因为使用DMA需要一些开发工作和一些运行时来管理DMA传输本身,请参见 在这里,这可能不值得使用DMA的好处。也就是说,对于一小部分数据,其性能或延迟不如在大传输期间。在嵌入式系统中,DMA控制器和它们的信道是有限的资源,因此重要的是要考虑函数的哪一部分最受益于这样的资源。因此,如果是关于负载数据,例如通过慢速串行连接传输的大文件或视频流,则通常更倾向于使用DMA进行与磁盘之间的数据传输

然而,这些信息是错误的,因为DMA不值得在串行接口上使用,因为串行接口一次只传输一个位。请注意,微控制器作为您的 具有内置的外围组件,可将串行逐位流转换为逐字节或逐字流,可通过DMA以一种有用的方式轻松传输,尤其是在数据包大小事先已知且软件无需分析非格式化流的情况下。此外,并非所有串行连接都很慢。如果项目使用,e。g、 ,一个SPI闪存芯片,则SPI串行连接用于数据传输

DMA-CPU将其所有线路置于高阻抗状态

我不知道你从哪里得到的,但是你不应该再使用这个来源了

DMA传输的频率并不重要,除非达到总线吞吐量。您可以每周、每月、每年、每十年传输一个字节。。。。。这是绝对可以的

在STM32微控制器中,这是一个非常重要的功能,因为即使在核心CPU休眠的情况下,uC处于低功耗模式,我们也可以从外部设备传输数据。DMA控制器甚至可以在满足某些条件时唤醒内核

DMA-CPU将其所有线路置于高阻抗状态

我不知道你从哪里得到的,但是你不应该再使用这个来源了

DMA传输的频率并不重要,除非达到总线吞吐量。您可以每周、每月、每年、每十年传输一个字节。。。。。这是绝对可以的


在STM32微控制器中,这是一个非常重要的功能,因为即使在核心CPU休眠的情况下,uC处于低功耗模式,我们也可以从外部设备传输数据。DMA控制器甚至可以在满足某些条件时唤醒内核。

具体取决于您对开销的定义,指令、速度、功耗等?这可能是真的,是的。在STM32F4上设置DMA控制器进行内存到内存的传输至少需要4倍的外围寄存器写入,这将需要几个CPU周期。因此,对于较小的数据量,这实际上可能比让CPU复制它的性能更差。您的问题无法回答。DMA是内置的,没有额外的系统成本。DMA使用案例如此不同-答案仅在实际应用程序级别上是可能的,但通常不可能。在我看来,作为一个初学者,你应该避免任何微优化方面的考虑。关于你的系统是如何设计的,你有很多没有告诉我们,我想这是一个嵌入式板系统吧?或者你的用例。但是这个链接可能会有帮助:你是对的,这是一个STM32F4我相信学习的目标是阅读STM32F4参考手册,特别是,第10节DMA结合使用stm32 f2/f4/f7应用程序说明,并提供配置选项和性能注意事项的讨论。具体取决于您对开销的定义、指令、速度、功耗等?这可能是真的,是的。在STM32F4上设置DMA控制器进行内存到内存的传输至少需要4倍的外围寄存器写入,这将需要几个CPU周期。因此,对于较小的数据量,这实际上可能比让CPU复制它的性能更差。您的问题无法回答。DMA是内置的,没有额外的系统成本。DMA使用案例如此不同-答案仅在实际应用程序级别上是可能的,但通常不可能。在我看来,作为一个初学者,你应该避免任何微优化方面的考虑。关于你的系统是如何设计的,你有很多没有告诉我们,我想这是一个嵌入式板系统吧?或者你的用例。但是这个链接可能会有所帮助:u是对的,这是一个STM32F4。我相信学习的目标是阅读STM32F4参考手册,特别是第10节DMA以及使用stm32 f2/f4/f7应用程序说明,并提供配置选项和性能注意事项的讨论。核心优先于DMA。这几乎不明显。另一方面,DMA将被核心访问暂停。防止真正密集和时间关键的DMA事务在核心以外的其他内存段上运行。核心具有DMA的优先级。这几乎不明显。另一方面
侧DMA将被核心访问暂停。防止真正密集和时间关键的DMA事务在核心以外的其他内存段上运行。链接和答案是误导性的。因为DMA不值得在串行接口上使用,因为这些接口一次只传输一个位-这是没有意义的,因为DMA只传输最小字节。是的,这就是为什么我写了这样一个信息是错误的。关于使用DMA传输慢周期数据的限制,你有其他建议参考吗?我希望你能了解更多。@P_u_u_u_u_u_u_u_u_u请重读HelpingHand说的话。听起来你们俩都很同意;Jia Hoo Loh-你已经得到了你的答案:如果你愿意投入精力,DMA传输将有助于减轻CPU的负担,不管数据有多少,或者发送的频率有多低。链接和答案是误导性的。因为DMA不值得在串行接口上使用,因为这些接口一次只传输一个位-这是没有意义的,因为DMA只传输最小字节。是的,这就是为什么我写了这样一个信息是错误的。关于使用DMA传输慢周期数据的限制,你有其他建议参考吗?我希望你能了解更多。@P_u_u_u_u_u_u_u_u_u请重读HelpingHand说的话。听起来你们俩都很同意;Jia Hoo Loh-你已经得到了你的答案:如果你愿意投入精力,DMA传输将有助于减轻CPU的负担,不管数据有多少,或者您发送的频率有多低。这是关于使用DMA传输进行慢周期数据限制的任何其他建议参考吗?这是关于使用DMA传输进行慢周期数据限制的任何其他建议参考吗?