等30F2020的芯片等的实在无聊,试了一个同样的一个除法运算
float val;
unsigned long a=200000;
unsigned int b=3000;
val=(float)a/b;
用MCC30编译,然后MPLAB SIM仿真,用617个指令周期完成
再用dsPICC9.60PL3编译,然后MPLAB SIM仿真,用2个指令周期就完成了。
这差距也有点太大了!难道是有什么设置不同造成的吗?
PS:这就是无聊做的一个测试,不是要对比2个编译器效率和好坏,仅仅就一个除法也反应不出什么。只是不明白为什么有这么大的差距,希望有人能指点一下,感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
没有用过dsPICC30,但是一个除法绝对不会只有那么少的时钟周期就能算出来的。因此我倒是怀疑楼主测试的准确性。
-----------------------------------------------------------------------
我没必要去造假,我也是第一次用dspic,程序里有一个long型变量除int变量的计算,要得到小数位。今天上网的时候看到有人对比dsPICC和MCC30效率我也无聊自己来试一下,才发现这个问题。
dsPICC用的是破解版,MCC30是自己写序列号注册的。
dsPICC (原文件名:dsPICC1.jpg)
dsPICC (原文件名:dsPICC2.jpg)
MCC (原文件名:MCC1.jpg)
MCC (原文件名:MCC2.jpg)
float val;
unsigned long a=200000;
unsigned int b=3000;
a = a + 1 ;
b = b + 1 ;
val=(float)a/b;
a = a + 1 ;
while(1) ;
如果把上面的 a = a+1 ; b=b+1 ;这两行去掉,有可能发生 2个指令周期的事情,我想这时候是编译器优化后的结果。4个字节的数据存储(浮点),确实只需要2个指令周期。如果象上面这样把 a = a+1 ; b = b+1留着,让编译器无法偷懒,那么,dspicc,我用了一个2007年的960版本,算了700多个指令周期。编译器来源于PUDN,只有一款。当然,有可能960PL3会算地快一点,但数量级不可能有差距的。
LZ可以实验一下。实验完毕,删编译器。
一周热门 更多>