本帖最后由 韬铸88 于 2015-8-1 14:32 编辑
最近在学习Kinetis芯片,发现在使用codeWarrior、PE工具写代码调试时,发现使用printf()函数无法打印浮点数。情况如下:
double Dataout = 2.55;
printf("Dataout = %1.3f.\r\n",Dataout);
执行以上代码,输出的结果是:
Dataout = %1.3f.
如果是强制转换Dataout的数据类型为int,情况是:
double Dataout = 2.55;
int datout = 0;
datout = (int)(Dataout * 100);
printf("Dataout = %d.\r\n",datout);
打印输出是:
Dataout = 255.
不知道怎么回事,为什么printf()函数打印不出浮点数呢?请各位给予指点指点,谢谢!
###############################################################################################################
经昨天楼下的建议,改用转换为字符串再打印输出的方法。刚实验了一下,还是不行。转换不了字符串。情况如下:
double Dataout = 2.55;
unsigned char datout[50] = {0};
sprintf(datout, "Dataout = %1.3f.", Dataout);
printf("%s.\r\n",datout);
执行程序,打印结果输出为:
Dataout = %1.3f.
太奇怪了,什么情况导致不能实现呢?库函数有问题吗?查找printf()、sprintf()函数,发现是在\Freescale\CW MCU v10.6\MCU\ARM_GCC_Support\ewl\EWL_C\include\cstdio文件中声明,未找到实现函数代码。
##################################################################################################################
另外,我用kds新建一个工程,同样的做浮点数打印输出,打印结果与使用CW建的工程打印结果是一样的现象。
################################################################################################################
今天把之前在CW、KDS下建的工程代码,转到IAR上去编译调试的时候,发现原来的代码可以打印出浮点数。特此在这里追加这一结果,谢谢大家!
|