[应用相关] 如何高效的使用DMA?

[复制链接]
14313|79
forever3609 发表于 2013-4-28 23:26 | 显示全部楼层
好贴,学习了,谢谢。
error_dan 发表于 2013-4-29 15:22 | 显示全部楼层
最简单的,AD+DMA外设启动之后,应用程序直接到固定的地址去读数据就行了.
gxgclg 发表于 2013-4-29 15:58 | 显示全部楼层
香水城 发表于 2008-9-26 12:27
举个例子:一个系统要求每个一段时间需要把RAM中数据备份到外部EEPROM,你就可以启动DMA传送数据到外部EEPR ...

很形象的例子
yybj 发表于 2013-4-29 16:10 | 显示全部楼层
香主的解答还是很给力的
无冕之王 发表于 2013-4-29 16:18 | 显示全部楼层
香主提的很多建议都很有用
GeekNFC 发表于 2013-4-29 18:28 | 显示全部楼层
就算是单线程运行,DMA还是有可能比软件copy数据更快,因为DMA是全硬件操作的,不需要插入程序运行延时。
拿起书本 发表于 2013-5-10 19:47 | 显示全部楼层
DMA只在传大块的数据时有才优势,在一般的小单片机系统里用DMA,几乎没有意义.学习中
hanzhenfei 发表于 2014-7-5 11:42 | 显示全部楼层
看到此贴受益匪浅!!!!!
diweo 发表于 2014-7-5 11:56 | 显示全部楼层
本帖最后由 diweo 于 2014-7-5 11:58 编辑
拿起书本 发表于 2013-5-10 19:47
DMA只在传大块的数据时有才优势,在一般的小单片机系统里用DMA,几乎没有意义.学习中 ...
我举个例子吧,
用单片机与触摸屏通信,使用Modbus协议,数据长度 从几字节到几十字节不等。
假设波特率为9600,如果用发送完成中断 ,那要中断好多次。而且每次中断大约1ms。如果用查询方式,那么几到几十ms的时间CPU不能做别的事。
使用DMA的话,配置好后,直接发送了。必要时可以开启DMA传输完成中断,中断1次就够了。当然,代价就是要事先配置一个足够大的缓冲区,尽管这个缓冲区大多数时候都不满。
runningwzf 发表于 2014-7-5 17:18 | 显示全部楼层
用操作系统吧,你可以充分体会DMA的溢出
qingfengsgl 发表于 2024-9-25 13:08 | 显示全部楼层
我觉得下面这个例子,可以回复楼主的疑问,因为我也这样疑问过。
假设这样一种应用情况,MCU通过SPI刷屏,且没有其他活要干。那么使用DMA传输SPI,和查询完成标志位阻塞传输SPI没什么区别。 这种情况下,查询标志位阻塞传输SPI甚至要比字节中断方式传输SPI要更节约时间。
这种情况,使用DMA传输时,刷屏的帧是由单次DMA传输完成所有像素点的时间决定的,DMA本身无法让它变的更快,下一帧的数据传输也不应该在上一帧传输完之前就开始发送,否则图像会显示不全。顶多又加个乒乓方式,缩短一下数据到DMA缓存的时间,但这个提升应该很小。  所以,假设单片机只有这种单一重复任务,即便是使用DMA,也无法提高其效率。  
以上的情况只是能解答楼主对于DMA的传输疑问,但恰恰在我们应用MCU时,很少会有只执行单个任务的情况,这时候就可以通过DMA的完成中断,和自己分配任务分割,来巧妙的利用一帧数据的DMA传输过程中的时间了。
如果有不对的解释,请大神指证。
610u 发表于 2024-9-29 22:28 来自手机 | 显示全部楼层
正确的做法应该是DMA传输的过程中
更多更合适ii 发表于 2024-10-2 21:40 来自手机 | 显示全部楼层
for(i = 0; i < 512; ++i){     while(数据没有准备好);    // 等待     *buff++ = 数据源
天天向善 发表于 2024-10-6 15:24 | 显示全部楼层
最简单的方法是,ad+dma外设启动后,应用可以直接去固定地址读取数据。
理想阳 发表于 2024-10-7 07:52 | 显示全部楼层
香火大师的回答还是很厉害的
LLGTR 发表于 2024-10-7 17:27 | 显示全部楼层
朱湘提出的许多建议非常有用
物联万物互联 发表于 2024-10-10 06:31 | 显示全部楼层
使用该操作系统,您可以充分体验dma的溢出
AIsignel 发表于 2024-10-10 12:31 | 显示全部楼层
朱祥提出的许多建议很有用,
Pretext 发表于 2024-10-10 21:58 | 显示全部楼层
高效使用DMA(直接内存访问)需注意合理分配资源、优化数据传输路径、合理调度数据传输时序,确保数据传输与CPU并行处理协同工作。
primojones 发表于 2024-10-11 20:41 | 显示全部楼层
使用DMA传输时,尽量使用连续的内存空间,以避免传输中断和数据对齐问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0