WhyCan Forum(哇酷开发者社区)

我们能随心所欲"有问题百度(谷歌)一下", 这得感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-04-02 13:54:44

TivonLiu
会员
注册时间: 2019-12-27
累计积分: 29

测试了一下RTT中用DMA和for循环拷贝128K花费的时间

tiny200 f1c200s

01-01 00:00:15.503 I/NO_TAG tshell: cp 128K used 1077 us whit for-circle-enCache,err 0
01-01 00:00:15.517 I/NO_TAG tshell: cp 128K used 1824 us whit DMA-disCache,err 0
01-01 00:00:15.525 I/NO_TAG tshell: cp 128K used 2037 us whit DMA-enCache,err 0
01-01 00:00:15.539 I/NO_TAG tshell: cp 128K used 5877 us whit for-circle-disCaches,err 0
periph_get_pll_clk:600000000
cpu_get_clk:408000000
ahb_get_clk:200000000
apb_get_clk:100000000
ddr_pll_get_clk:480000000

01-01 00:00:11.440 I/NO_TAG tshell: cp 128K used 1088 us whit for-circle-enCache,err 0
01-01 00:00:11.454 I/NO_TAG tshell: cp 128K used 1674 us whit DMA-disCache,err 0
01-01 00:00:11.462 I/NO_TAG tshell: cp 128K used 1888 us whit DMA-enCache,err 0
01-01 00:00:11.476 I/NO_TAG tshell: cp 128K used 5878 us whit for-circle-disCaches,err 0
periph_get_pll_clk:600000000
cpu_get_clk:408000000
ahb_get_clk:300000000
apb_get_clk:150000000
ddr_pll_get_clk:480000000

01-01 00:00:12.966 I/NO_TAG tshell: cp 128K used 1098 us whit for-circle-enCache,err 0
01-01 00:00:12.980 I/NO_TAG tshell: cp 128K used 1568 us whit DMA-disCache,err 0
01-01 00:00:12.987 I/NO_TAG tshell: cp 128K used 1781 us whit DMA-enCache,err 0
01-01 00:00:12.001 I/NO_TAG tshell: cp 128K used 5867 us whit for-circle-disCaches,err 0
periph_get_pll_clk:600000000
cpu_get_clk:408000000
ahb_get_clk:600000000
apb_get_clk:300000000
ddr_pll_get_clk:480000000

01-01 00:00:17.937 I/NO_TAG tshell: cp 128K used 1056 us whit for-circle-enCache,err 0
01-01 00:00:17.952 I/NO_TAG tshell: cp 128K used 1568 us whit DMA-disCache,err 0
01-01 00:00:17.959 I/NO_TAG tshell: cp 128K used 1674 us whit DMA-enCache,err 0
01-01 00:00:17.972 I/NO_TAG tshell: cp 128K used 5590 us whit for-circle-disCaches,err 0
periph_get_pll_clk:600000000
cpu_get_clk:600000000
ahb_get_clk:600000000
apb_get_clk:300000000
ddr_pll_get_clk:480000000

NDMA通道手册上最大传输128K,其实最大256K-1都可以,因为寄存器有18位,我试过暂时没有问题

最近编辑记录 TivonLiu (2020-04-02 13:56:31)

离线

#2 2020-04-02 15:10:39

aozima
会员
注册时间: 2019-05-25
累计积分: 99

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

CPU拷贝刷cache没?
for拷贝每次拷贝多少字节?

这些也会稍微影响性能。
不过这芯片的主频比总线快不少,所以这块影响不是很大。

离线

#3 2020-04-02 15:34:25

达克罗德
会员
注册时间: 2018-04-10
累计积分: 913

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

以前就发现memcpy比dma还快点

离线

#4 2020-04-02 15:53:58

TivonLiu
会员
注册时间: 2019-12-27
累计积分: 29

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

aozima 说:

CPU拷贝刷cache没?
for拷贝每次拷贝多少字节?

这些也会稍微影响性能。
不过这芯片的主频比总线快不少,所以这块影响不是很大。

cpu拷贝如果关cache就是最慢那个,开cache就是最快那个

所有拷贝都是关中断后进行的,计算时间使用的是硬件定时器

离线

#5 2020-04-02 16:04:12

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 94

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

那dma还有什么意义啊 

测试环境应该裸机吧?
有没有LINUX下的结果?

离线

#6 2020-04-02 16:30:39

Blueskull
会员
注册时间: 2020-02-20
累计积分: 189

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

DMA本来就不是为了快而生的。DMA是为了解放CPU而生的。在进行DMA copy的时候CPU可以干别的事。
顺便说一下,memcpy也不是for循环实现的。memcpy是libcpu提供的高度优化的汇编代码,对各种对其、数据大小都做了高度优化。

离线

#7 2020-04-02 16:43:47

staunchheart
会员
注册时间: 2019-12-17
累计积分: 170

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

能将测试的代码发出来作个参考吗?

离线

#8 2020-04-02 17:14:33

TivonLiu
会员
注册时间: 2019-12-27
累计积分: 29

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

staunchheart 说:

能将测试的代码发出来作个参考吗?

dma.zip
写得乱,见笑了
启动命令cmptest

离线

#9 2020-04-02 17:14:46

tomyqg
会员
注册时间: 2019-12-06
累计积分: 16

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

ddr跑这么高,稳定不啊

离线

#10 2020-04-02 17:25:45

staunchheart
会员
注册时间: 2019-12-17
累计积分: 170

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

TivonLiu 说:

dma.zip
写得乱,见笑了
启动命令cmptest

原来玩RTT的还有这么多朋友呀,希望能与你加QQ。
我有些问题想请教。

离线

#11 2020-04-02 17:27:58

TivonLiu
会员
注册时间: 2019-12-27
累计积分: 29

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

tomyqg 说:

ddr跑这么高,稳定不啊

默认312,瞎改,反正不会掉肉

离线

#12 2020-04-02 17:29:37

TivonLiu
会员
注册时间: 2019-12-27
累计积分: 29

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

staunchheart 说:

原来玩RTT的还有这么多朋友呀,希望能与你加QQ。
我有些问题想请教。

请教不敢当,我早就在你的群中了,痴猫追风

离线

#13 2020-04-03 08:30:11

staunchheart
会员
注册时间: 2019-12-17
累计积分: 170

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

请教一下,DMA,如果采用中断的方式处理传输完成,有没有DEMO。
我没有调通。
这个代码中,DMA传输是用检测寄存器的方式等待。

离线

#14 2020-06-22 17:50:46

jqilin
会员
注册时间: 2020-02-15
累计积分: 1

Re: 测试了一下RTT中用DMA和for循环拷贝128K花费的时间

我想看看F1C100S的DMA寄存器怎么配置的。

离线

页脚

工信部备案:粤ICP备20025096号-1 Powered by FluxBB