为啥这么慢呢?

2019-07-22 14:40发布


sprintf(rgbhChar,"%4.4f",1234.5678);

测试了一下,这句耗时18740个机器周期。
印象里,以前测试过Keil的C51,好像比较复杂的转换也就2K~4K个机器周期(很久了,记忆准确吗?)

现CPU是msp430F449,编译器是IAR,工程选项卡里已经选了硬件乘法器。
为啥这么慢呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
spark周
1楼-- · 2019-07-22 20:37
没怎么用MSP430的浮点运算库,之前用了一次,因为代码消耗的太大,就把数据改成int型处理了。
楼主C51上的测试代码是一致的嘛?会不会是测试条件不同造成的?
heweibig
2楼-- · 2019-07-22 22:19
 精彩回答 2  元偷偷看……
zhaoxqi
3楼-- · 2019-07-23 02:40
重新做了对比测试,测试方法如下:
被测试语句:sprintf(rgba,"%8.4f",vlf);
变量取值:vlf=1234.5678  //在watch窗口手工输入

测试结果(编译器版本:Keil/C51v900、IAR/EW4305.2):
C51耗时3123指令周期,若晶振为12M(指令周期1MHz),耗时3.123毫秒,执行结果1234.5680
EW430耗时19072指令周期,MCLK为1MHz时耗时19ms,执行结果为1234.5677
zhaoxqi
4楼-- · 2019-07-23 07:23

1.为何同样的C语句,编译后指令(周期)差这么多?是否精简指令集都如此?
2.对于库函数,应该都是以obj提供的,也就是都是预先编译好的。
  那么,在工程选项中是否选择硬件乘法器、选择何种级别的编译优化,对库函数没有影响?
spark周
5楼-- · 2019-07-23 10:41
精简指令集的特点即是这样,同样的操作,编译出来的指令数会多很多(取决于做的事情,有些需要的指令多,有的需要的少)。同时,不同的IDE的printf库的实现都不一样,针对应用,优化的程度不同所以效率也不一样,不能作为一个比较的标准。
liliang9554
6楼-- · 2019-07-23 12:58
比较的方式可以换下,实际上C51的频率好像就在8~24MHz之间。而430最快可以做到16MHz/24MHz,所以性能应该是这样比较出来的:二者都用12MHz。RISC和CISC的理念差异也在这里体现

一周热门 更多>