sprintf 问题

2019-08-06 15:58发布

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

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

现CPU是msp430F449,编译器是IAR,工程选项卡里已经选了硬件乘法器。
为啥这么慢呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
spark周
1楼-- · 2019-08-06 20:00
 精彩回答 2  元偷偷看……
heweibig
2楼-- · 2019-08-06 23:38

在相同条件下的对比才有用;建议先搞清楚c51的到底是多少,应该肯定比430慢,那个机器周期都12分频的。
zhaoxqi
3楼-- · 2019-08-07 01:07
重新做了对比测试,测试方法如下:
被测试语句: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-08-07 06:53
1.为何同样的C语句,编译后指令(周期)差这么多?是否精简指令集都如此?
2.对于库函数,应该都是以obj提供的,也就是都是预先编译好的。
  那么,在工程选项中是否选择硬件乘法器、选择何种级别的编译优化,对库函数没有影响?
spark周
5楼-- · 2019-08-07 09:17
精简指令集的特点即是这样,同样的操作,编译出来的指令数会多很多(取决于做的事情,有些需要的指令多,有的需要的少)。同时,不同的IDE的printf库的实现都不一样,针对应用,优化的程度不同所以效率也不一样,不能作为一个比较的标准。
liliang9554
6楼-- · 2019-08-07 13:23
 精彩回答 2  元偷偷看……

一周热门 更多>