查看: 2498|回复: 0

[原创] MCUXpresso IDE串口打印浮点数问题

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-1-11 19:51:10 | 显示全部楼层 |阅读模式
    一般来说,MCUXpresso IDE直接生成的项目都是无法输出浮点数的,无论是包含哪个头文件、使用sprintf事先转化或者使用printf直接输出,都是为空。
    原因是MCUXpresso IDE默认创建的工程基于Redlib,这是一个精简的库,不包含这部分功能,具体可以看下面这片帖子:
    如何使用MCUXpresso IDE和LPCOpen库创建一个新项目

    解决这个问题有以下两个途径。

    (一)使用newlibnano库
    newlibnano是一个更加完备的库,拥有浮点输出的配置:
    newlib_LI.jpg

    设置为
    newlibnano后,输出float的选项就变成可选。



    (二)自定义一个ftoa函数
    使用Redlib目的就是使代码精简,自定义一个ftoa把float转化为char字符串输出,可以避免使用庞大的newlib库
    1. void float_to_str(char *str,double num)
    2. {
    3.      int high;//float_整数部分
    4.      double low;//float_小数部分
    5.      char *start=str;
    6.      int n=0;
    7.      char ch[20];
    8.      int i;
    9.      high=(int)num;
    10.      low=num-high;

    11.      while(high>0){
    12.          ch[n++]='0'+high%10;
    13.          high=high/10;
    14.      }

    15.      for(i=n-1;i>=0;i--){
    16.          *str++=ch[i];
    17.      }

    18.      num -= (int)num;
    19.      double tp = 0.1;
    20.      *str++='.';

    21.      while(num > eps){//精度限制
    22.          num -= tp * (int)(low * 10);
    23.          tp /= 10;
    24.          *str++='0'+(int)(low*10);
    25.          low=low*10.0-(int)(low*10);
    26.      }
    27.      *str='\0';
    28.      str=start;
    29. }
    复制代码

    但是该函数有缺点,输出的末尾不精准。


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 03:10 , Processed in 0.105907 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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