kangyiHEU 发表于 2014-11-28 19:35:55

iar中k60的sprintf函数的浮点型

sprintf(str,"%6.3f",4.123);
      LCD_P6x8Str(90,5,str);
最后就一直显示个   f   不知道为什么明显浮点就不认呀

子鱼 发表于 2014-11-28 20:41:19

貌似IAR的编译器 对sprintf支持的不够好

子鱼 发表于 2014-11-28 20:42:30

应该是IAR编译器的问题,查了相关资料,是说在option中设置一下:
General option中的library configuration ,libray 选为full
library option 中的printf formatter 选择为full。
原因如下:
根本原因在于库中的printf, sprintf等函数的版本问题,由于支持全格式的时候占用的代码量和堆栈空间比较大,一般编译器默认都是实现标准甚至是最小的版本。
在不同的平台上,几种不同的版本支持的格式不一样,举个例子:
1)最小版本的printf仅支持整形格式化转义符%d以及字符串。

2)标准版本的printf支持除浮点外的其他格式,比如hex等等
3)全版本的printf支持所有格式包括%f浮点

可以参考一下这个链接:
IAREWARM 6.30 sprintf函数转换浮点数时出错 :http://www.amobbs.com/thread-5182148-1-1.html

qs6361036 发表于 2014-11-29 09:22:04

有这种问题,还真没注意,一直直接用sprintf() ,不过好像没用浮点数 。 受教啦

fengyunyu 发表于 2014-11-29 10:21:39

最好不用浮点数,占用堆栈空间比较大。

richyhuang 发表于 2014-11-29 13:56:00

iar是自己实现的printf,不是标准库的.

Ray______ 发表于 2014-11-30 11:40:11

正好遇到问题,printf不了浮点,在watch看的变量又奇怪

kangyiHEU 发表于 2014-11-30 13:35:49

子鱼 发表于 2014-11-28 20:42
应该是IAR编译器的问题,查了相关资料,是说在option中设置一下:
General option中的library configuratio ...

给力解决了{:lol:}

kangyiHEU 发表于 2014-11-30 13:39:46

还有就是除了设置上边那位所说的,设置完成后,如果用了野火的k60库要把他本身自带的sprintf函数屏蔽掉

jinyi7016 发表于 2015-1-10 08:23:09

把浮点转换成整数与小数分别显示

Ray______ 发表于 2015-1-12 00:53:46

为啥我照3楼的做也不行

qq开始学单片机 发表于 2015-1-12 02:31:58

受教了,一般很少用到sprintf,都是自己做函数

superrf 发表于 2015-1-12 14:15:28

谢谢分享,用到的时候注意了

lzl000 发表于 2015-1-12 21:31:24

编译器的问题啊。多谢3楼给出了好答案
页: [1]
查看完整版本: iar中k60的sprintf函数的浮点型