在线时间514 小时
UID2025756
注册时间2013-7-16
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 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是一个机器周期,而且我们的手册上都讲了,是一个机器周期。
希望能帮到你; |
|