[Kinetis] 【经验分享】Kinetis IAR工程下无法打印浮点的问题解决

[复制链接]
4901|17
 楼主| FSL_TICS_ZJJ 发表于 2014-7-11 14:42 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_A 于 2014-10-21 15:48 编辑

【经验分享】Kinetis IAR工程下无法打印浮点的问题解决
一,问题描述
大家在使用kinetis IAR工程,并且想使用printf打印出浮点变量的时候,会发现打出来的浮点结果只有f,而使用Keil工程就能够正确打印。网上有很多的说法,其中说的最多的就是设置IARLibrary options printf formatterfull功能,如下图:
1.jpg
1
但是,实际上就算选择了full功能,打印出来的浮点结果任然是f,比如定义如下:
float   temp=36.5;
printf("\ntemp=%f\n",temp);
实际打印出的结果是:
temp=f
发现在我们的KE系列,KL系列,部分K系列甚至KV系列,都会有这样的浮点打印问题。那么这个问题该如何解决呢?
二,解决方案
       其实根本原因是工程中common文件夹下的printf.c不支持浮点打印的原因。这里我会给大家两个文件,分别为read.cwrite.c来代替printf.c文件。
这里以KL25官方代码KL25_SC中的LQRUG_bme_ex1工程为例,讲解如何解决浮点问题,具体操作步骤如下:
1,将含有write.cread.c的文件夹semihosting拷贝到路径kl25_sc_rev10\klxx-sc-baremetal\src下,然后打开LQRUG_bme_ex1IAR工程。
2,选择工程的options->add->add group, 在工程中添加一个名为semihosting的文件夹。
2.jpg
2
3,选择工程的options->add->add files,选中第1步中添加的semihosting文件夹下的两个文件write.cread.c,并将它们添加到工程的semihosting文件夹中,添加完成后如下图:
3.jpg
3
4,去掉工程中common文件夹下的printf.c文件,如下:
4.jpg
4
5,在common.h的头文件中添加stdio.h,如下:
#include "stdio.h"
6,检查write.cread.c中的串口发送函数和工程驱动包中uart.c的定义是否一致,如果不一致需要修改成uart.c定义的形式。
经过上面的配置,加入浮点代码,就可以打印浮点数了。
同样如问题描述中的定义,打印出的结果如下:
temp=36.500000
可以看到以及能够成功打印。
其余的KEKKV的修改方法都是一样的,大家可以自行测试。
三,附件分享
为了防止大家在修改过程中出现问题,这里给大家一些参考工程,分别给出KL,KE,以及KV系列的,K系列的大家可以参考50M的代码:KINETIS_50MHZ_SC
semihosting.rar (2.04 KB, 下载次数: 79)

KV_IAR_float.rar (607.38 KB, 下载次数: 50)

KL25_IAR_float.rar (370.52 KB, 下载次数: 78)

KE_IAR_float.rar (244.69 KB, 下载次数: 42)

【经验分享】Kinetis IAR工程下无法打印浮点的问题解决.pdf (291.49 KB, 下载次数: 63)

 楼主| FSL_TICS_ZJJ 发表于 2014-7-11 14:43 | 显示全部楼层
如果大家还有其他办法或者补充,欢迎发帖交流。
ar_m_cu 发表于 2014-7-11 15:42 | 显示全部楼层
zsp1024 发表于 2014-7-12 20:15 | 显示全部楼层
飞思卡尔的新工程好像已经修改了这个缺陷!
 楼主| FSL_TICS_ZJJ 发表于 2014-7-14 09:13 | 显示全部楼层
zsp1024 发表于 2014-7-12 20:15
飞思卡尔的新工程好像已经修改了这个缺陷!

是的,部分的K系列还是没有这个问题,主要还是KE,KL,KV的。
xinyinxing 发表于 2014-7-14 15:39 | 显示全部楼层
感谢楼主宝贵经验分享!
 楼主| FSL_TICS_ZJJ 发表于 2014-7-15 09:13 | 显示全部楼层
xinyinxing 发表于 2014-7-14 15:39
感谢楼主宝贵经验分享!

不客气,如果在学习的过程中遇到问题,欢迎交流。
SA_XX 发表于 2014-7-15 20:25 | 显示全部楼层
看看,这个问题一直困扰着我
 楼主| FSL_TICS_ZJJ 发表于 2014-7-16 09:05 | 显示全部楼层
SA_XX 发表于 2014-7-15 20:25
看看,这个问题一直困扰着我

按照我的方法操作,就可以解决了。
 楼主| FSL_TICS_ZJJ 发表于 2014-7-16 09:10 | 显示全部楼层
SA_XX 发表于 2014-7-15 20:25
看看,这个问题一直困扰着我

更多经验分享,请到我们的经验分享总贴:https://bbs.21ic.com/icview-722190-1-1.html
冰水混合物orz 发表于 2014-8-3 13:51 | 显示全部楼层
试试看看
冰水混合物orz 发表于 2014-8-3 14:19 | 显示全部楼层
你好,我想问下这两个文件对编译器有要求吗?我在cw10.4下面发现有问题,'_LLIO_STDOUT' undeclared等错误
 楼主| FSL_TICS_ZJJ 发表于 2014-8-4 16:00 | 显示全部楼层
冰水混合物orz 发表于 2014-8-3 14:19
你好,我想问下这两个文件对编译器有要求吗?我在cw10.4下面发现有问题,'_LLIO_STDOUT' undeclared等错误 ...


你是在CW下也不能打印浮点吗?
回头我有空试下,你用的什么例程?
Jay1987887 发表于 2014-8-19 16:50 | 显示全部楼层
谢谢斑竹分享,学习一下!
pzjmail 发表于 2014-8-24 21:24 | 显示全部楼层
谢谢分享,以后知道什么解决了
1113240207 发表于 2014-10-4 14:19 | 显示全部楼层
阿列,来看一下 哈哈哈哈哈
 楼主| FSL_TICS_ZJJ 发表于 2014-10-8 10:45 | 显示全部楼层
1113240207 发表于 2014-10-4 14:19
阿列,来看一下 哈哈哈哈哈

更多中文资料,请到资料大本营:
https://bbs.21ic.com/icview-649582-1-1.html
WAMCNCN 发表于 2015-5-16 14:07 | 显示全部楼层
DEvice里没有KL26Z
,怎么办
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

5069

帖子

88

粉丝
快速回复 在线客服 返回列表 返回顶部