无需测试,DMA肯定比CPU快,简单的说,CPU必须从外设读一个数据到寄存器,再将寄存器写到一个内存,而DMA设置好移动数据的内存目标地址等参数后,DMA控制器直接产生地址,数据源源不断的移动 至于ls说CPU可以做别的事情,基本是不可能的,因为DMA运行的时候,地址总线数据总线都会被占用,CPU是无法运行的
[quote=引用 12 楼 leslielg 的回复:] [quote=引用 9 楼 of123 的回复:] [quote=引用 7 楼 leslielg 的回复:] [quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
[quote=引用 9 楼 of123 的回复:] [quote=引用 7 楼 leslielg 的回复:] [quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
[quote=引用 11 楼 jklinux 的回复:] [quote=引用 10 楼 leslielg 的回复:] [quote=引用 9 楼 of123 的回复:] [quote=引用 7 楼 leslielg 的回复:] [quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
[quote=引用 7 楼 leslielg 的回复:] [quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
[quote=引用 10 楼 leslielg 的回复:] [quote=引用 9 楼 of123 的回复:] [quote=引用 7 楼 leslielg 的回复:] [quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
[quote=引用 5 楼 of123 的回复:] 这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
dma的作用并不是说搬数据比cpu搬的快, 而是dma在搬数据的同时,cpu可以作别的事情. 而且这两者也会互相影响的,dma搬数据和cpu取数据时都需要使用系统的数据总线进行传输数据,而数据总线某一时该只能给一方独占使用,所以在以前性能比较垃圾的pc上播放歌典时复制硬盘数据会发生断断续续的问题.
肯定是 DMA 快,因为它不需要通过 CPU 中转。不必测试。
这么说吧,你有一批货,想从重庆发往深圳。你说先发到北京,再由北京发到深圳,和直接发到深圳,哪一个快? 当然了,芯片中的传输速度不是受距离影响,而是所需要的系统时钟数。常规的数据复制,是先从源地址读到 CPU 中,再从 CPU 写到目标地址。而 DMA 是直接通过总线从源传到目标。 是否能用 DMA 的确取决于平台。并不是每一个单片机都有可随意配置的 DMA 模块。另外,有些芯片的 DMA 是在线传输的,与你后期配置传输又不同。 所以,不可能有一种包打天下的方案。 其实,你可以一些宏和编译指令来处理不同芯片上的功能相似操作。也就是写多套可待换的代码,根据芯片选择性编译。 当然了,如果性能不敏感的话,你可以就用常规的通过 CPU 的转存,这是所有芯片都支持的。
21,597
社区成员
21,709
社区内容
加载中
试试用AI创作助手写篇文章吧