搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2014-7-11 15:18:56 | 显示全部楼层 |阅读模式
本帖最后由 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周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2014-7-11 15:19:25 | 显示全部楼层
如果大家还有其他更好的办法或者补充,都欢迎交流。

出0入0汤圆

发表于 2014-7-11 16:22:16 | 显示全部楼层
drivers下面是外设驱动库吗
官方的已经有了吗 针对K2系列的吗

出0入0汤圆

发表于 2014-7-11 17:06:17 | 显示全部楼层
已经不设回复可见啦,这个要学习一下:)

出0入0汤圆

发表于 2014-7-13 22:20:15 | 显示全部楼层
一直在用KEIL的人表示比较庆幸!

出0入0汤圆

发表于 2014-7-14 08:56:51 | 显示全部楼层
lyzhangxiang 发表于 2014-7-11 16:22
drivers下面是外设驱动库吗
官方的已经有了吗 针对K2系列的吗

drivers文件夹下的是外设驱动,但这些驱动覆盖面不全也不够完善。
飞思卡尔 Kinetis K系列第二代产品K2其实可以直接使用KDS编译环境+SDK库,SDK库是针对K2等新产品研发的并且覆盖面很全。

建议你看一下【FTF技术培训课程】基于SDK固件库开发针对Kinetis MCU的应用

出0入0汤圆

发表于 2014-7-14 09:35:28 | 显示全部楼层
FSL_TICS_Robin 发表于 2014-7-14 08:56
drivers文件夹下的是外设驱动,但这些驱动覆盖面不全也不够完善。
飞思卡尔 Kinetis K系列第二代产品K2其 ...

好的 谢谢
看来K2是后面主推的啊

出0入0汤圆

发表于 2014-7-14 09:39:26 | 显示全部楼层
lyzhangxiang 发表于 2014-7-14 09:35
好的 谢谢
看来K2是后面主推的啊

恩 对于选择Kinetis K系列的用户,今后主推其第二代产品K2。
其优势较第一代K较为明显,各软件、库的支持也丰富了许多,更多K2优势请看【FTF技术培训课程】下一代Kinetis K系列-K2,及L系列MCU介绍

出0入0汤圆

发表于 2014-9-22 21:52:34 来自手机 | 显示全部楼层
我是printf直接

出0入0汤圆

发表于 2014-9-22 21:53:11 来自手机 | 显示全部楼层
我是printf直接
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 23:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表