MCC30和dsPICC除法运算差距怎么这么大!

2020-02-08 12:28发布

等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个编译器效率和好坏,仅仅就一个除法也反应不出什么。只是不明白为什么有这么大的差距,希望有人能指点一下,感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
headwolf_83
1楼-- · 2020-02-09 09:27
因此dsPICC30是可以自动优化的?我一直用的是MCC30学生版,应该不能自动优化,因此才会以楼主的比较差距吧?
tiancaigao7
2楼-- · 2020-02-09 14:19
回复【6楼】headwolf_83  
和谐版没找到啊。根据初步测试,我觉得问题大体是这样的。

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会算地快一点,但数......
-----------------------------------------------------------------------

哈哈,试了一下确实是这样dsPICC太会偷懒了。把a=a+1;和b=b+1;写上去dsPICC用了700多指令周期才完成,看来确实是差距不小!
liansh
3楼-- · 2020-02-09 16:54
 精彩回答 2  元偷偷看……
tiancaigao7
4楼-- · 2020-02-09 21:49
叫小聪明比较合适。总结一条经验,测试编译器的时候,要小心编译器的小聪明。
headwolf_83
5楼-- · 2020-02-10 00:37
恩,但是有时候会被小聪明害死的。
还是继续用MCC30吧,毕竟那个每条指令的优化程度都是可以控制的。
tiancaigao7
6楼-- · 2020-02-10 04:33
dspic不是這樣玩的....

一周热门 更多>