查看: 2742|回复: 4

[已解决] MKE单片机中单周期乘法的使用问题(已解决)

[复制链接]

该用户从未签到

5

主题

9

帖子

0

新手上路

Rank: 1

积分
14
最后登录
1970-1-1
发表于 2014-6-18 22:51:50 | 显示全部楼层 |阅读模式
 我用的是芯片是MKE02Z16VLC2,工作在20MHz下,开发环境用的是CW10.6,我测试了一下一个32位X32位乘法需要10us,一个32位/16位除法运算需要14us.
我直接用的
int32*int32------>10us
int32/int16------->14us
这个芯片是基于M0+内核,应该是有32X32单周期乘法器的,我觉得不至于要花这么长时间,是我理解的不对,还是使用得不对呢?
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

0

主题

147

帖子

0

中级会员

Rank: 3Rank: 3

积分
343
最后登录
1970-1-1
发表于 2014-6-19 09:39:14 | 显示全部楼层

RE:MKE单片机中单周期乘法的使用问题

楼主你测试代码运行时间是什么测试的呢?
是不是你测试的方法不准导致的呢。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-19 14:19:34 | 显示全部楼层

RE:MKE单片机中单周期乘法的使用问题

看到你另外坛子关于这个问题的测试方法,建议你使用我们BME例程中,systick的测试方法测试代码运行时间,另外,请查看下你对应的汇编代码是什么?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-24 09:44:03 | 显示全部楼层

回复:MKE单片机中单周期乘法的使用问题

鉴于和楼主在其他的坛子讨论过这个问题,这里就贴出最终的讨论结果,并默认结贴,方便与非的网友参考。
看这个链接:http://blog.csdn.net/nolatin/article/details/8159551
MULS Rd,Rm,Rd
这就是汇编指令,执行时间是一个周期。
但是把,你首先要把值放到RM,Rd中把,这些也是占用汇编的啊。

1.jpg (87.95 KB, 下载次数: 0)
下载附件
5 天前 上传

 


我用C写的,你看到它测试的时候对应的汇编,里面有乘法指令,但是你要先把值放到你做乘法的寄存器中,所以会有取寄存器的时间损耗,这个LDR的时间是2个机器周期,计算完了,你要把计算好的值再放到另外一个地方吧,那个也是要机器周期的,STR也是2个机器周期,这样加起来也有个13个机器周期,大概0.65us。
而且你的测试方法不准确,GPIO的汇编也有好多个机器周期,加起来也差不多是你测的时间一个多微秒。
如果要精确测试,需要使用systick的方式,去读,然后减掉读取systick损耗的时间,就是你单条C乘法的时间,然后你再减掉汇编的取值时间,就是你乘法指令的时间。
方法就是这样,你可以自行测试,从你最后一次结果看,基本验证我们的MULS是一个机器周期,而且我们的手册上都讲了,是一个机器周期。
希望能帮到你;
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

705

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1745
最后登录
1970-1-1
发表于 2014-6-24 15:44:35 | 显示全部楼层

RE:MKE单片机中单周期乘法的使用问题(已解决)

学习了,楼主的问题真仔细,之前都没有太多关心,但是的确感觉这个测试还是非常重要的,还是使用systick比较靠谱点。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 08:07 , Processed in 0.105061 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表