|
本帖最后由 FSL_TICS_Robin 于 2014-7-18 14:30 编辑
【经验分享】Kinetis IAR工程下无法打印浮点的问题解决
一,问题描述
大家在使用kinetis IAR工程,并且想使用printf打印出浮点变量的时候,会发现打出来的浮点结果只有f,而使用Keil工程就能够正确打印。网上有很多的说法,其中说的最多的就是设置IAR的Library options 下printf formatter为full功能,如下图:
图1
但是,实际上就算选择了full功能,打印出来的浮点结果任然是f,比如定义如下:
float temp=36.5;
printf("\ntemp=%f\n",temp);
实际打印出的结果是:
temp=f
发现在我们的KE系列,KL系列,部分K系列甚至KV系列,都会有这样的浮点打印问题。那么这个问题该如何解决呢?
二,解决方案
其实根本原因是工程中common文件夹下的printf.c不支持浮点打印的原因。这里我会给大家两个文件,分别为read.c和write.c来代替printf.c文件。
这里以KL25官方代码KL25_SC中的LQRUG_bme_ex1工程为例,讲解如何解决浮点问题,具体操作步骤如下:
1,将含有write.c和read.c的文件夹semihosting拷贝到路径kl25_sc_rev10\klxx-sc-baremetal\src下,然后打开LQRUG_bme_ex1的IAR工程。
2,选择工程的options->add->add group, 在工程中添加一个名为semihosting的文件夹。
图2
3,选择工程的options->add->add files,选中第1步中添加的semihosting文件夹下的两个文件write.c和read.c,并将它们添加到工程的semihosting文件夹中,添加完成后如下图:
图3
4,去掉工程中common文件夹下的printf.c文件,如下:
图4
5,在common.h的头文件中添加stdio.h,如下:
#include "stdio.h"
6,检查write.c,read.c中的串口发送函数和工程驱动包中uart.c的定义是否一致,如果不一致需要修改成uart.c定义的形式。
经过上面的配置,加入浮点代码,就可以打印浮点数了。
同样如问题描述中的定义,打印出的结果如下:
temp=36.500000
可以看到以及能够成功打印。
其余的KE,K,KV的修改方法都是一样的,大家可以自行测试。
三,附件分享
为了防止大家在修改过程中出现问题,这里给大家一些参考工程,分别给出KL,KE,以及KV系列的,K系列的大家可以参考50M的代码:KINETIS_50MHZ_SC。
PS:本帖可从飞思卡尔版块置顶帖:飞思卡尔Kinetis资料大本营的飞思卡尔论坛支持小组【经验分享】帖汇总链接进入。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|