单片机不支持printf 浮点类型的解决办法

2023-10-27

        在一些单片机中因为资源受限官方提供的SDK中通常不提供浮点类型数据的打印。如需浮点打印功能可以参考如下做法:

前提条件

    1、串口通信正常
    2、printf 函数已经移植完成

操作方法

        1、添加以下函数到工程,以下函数的作用为将一个float类型函数转换为一个字符串。
        2、将转换完成的字符串通过printf("%s");进行输出打印。

/**
 * @brief 将float类型数据转换为字符串输出
 * 
 * @param num [IN] 要转换的数据
 * @param n [IN] 小数位的个数
 * @return uint8_t* [OUT] 转换完成的字符串的
 */
uint8_t *float2str(double num, int n)
{
    static uint8_t num_str[13] = {
        '\0'};
    uint8_t len = 0;
    uint8_t n_max = 0; //小数点最大位数
    uint32_t i = 0;

    for (i = 0; i < 13; i++) //字符串清空
        num_str[i] = '\0';
    //确定符号
    if (num > 0)
    {
        num_str[0] = '+';
    }
    else if (num < 0)
    {
        num_str[0] = '-';
        num = -num;
    }

    if ((int)(num / 100000) != 0)		//确定整数部分长度
    { // 6位数
        len = 7;
        n_max = 4;
    }
    else if ((int)(num / 10000) != 0)
    { // 5位数
        len = 6;
        n_max = 5;
    }
    else if ((int)(num / 1000) != 0)
    { // 4位数
        len = 5;
        n_max = 6;
    }
    else if ((int)(num / 100) != 0)
    { // 3位数
        len = 4;
        n_max = 7;
    }
    else if ((int)(num / 10) != 0)
    { // 2位数
        len = 3;
        n_max = 8;
    }
    else
    { // 1位数
        len = 2;
        n_max = 9;
    }

    if (n > n_max)				//小数点限幅
        n = n_max;
    len += n; 					//确定长度

    i = n;		 				//变成整数
    while (i--)
        num = (num * 10);

    while (n--)					 //转换小数
    {
        num_str[len--] = (int)num % 10 + 0x30;
        num = num / 10;
    }
    num_str[len] = '.';

   
    while (len--)				 //转换整数
    {
        num_str[len] = (int)num % 10 + 0x30;
        num = num / 10;
        if (len == 1)
            break;
    }
    return num_str;
}

————————————————
版权声明:本文为CSDN博主「Argon_Ghost」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Argon_Ghost/article/details/123787706

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机不支持printf 浮点类型的解决办法 的相关文章

随机推荐

  • 解决windows系统wifi图标不见了的问题

    前言 最近大家在使用win11的时候是不是常常会遇到一个情况 那就是在某一次开机时wifi图标不见了 是不是很惊讶 没有动什么东西呀 难道wifi模块坏了 上次关机时挺正常的呀 是不是心里面很多疑问 哈哈 恰巧我最近也遇到了这个问题 刚开始
  • 检查IP或端口是否被封

    遇到IP连接超时 想要确认是否被封 可通过以下几个方式检验 IP可用性检测工具 Tools大全在线工具 Ping mtr dig and TCP port check from multiple locations 端口扫描 站长工具
  • Eclipse下,LogCat(deprecated),显示不了内容,或者全部都是Unknown

    这张图片中的下面的LogCat deprecated 显示不了内容 或者全部都是Unknown 我的解决方法是打开LogCat 没有 deprecated 标志的那个 deprecated 意思为弃用 废弃 不赞成 这样就能使用了 但是有些
  • 2023最新Python阅读书籍推荐

    a byte of python 中文 简明 Python 教程 入门的书很多 但能让新手轻松看懂的就少了 作者写的思路非常清晰 对每一个知识点讲解的很到位 不多不少 对初学者来说 力道刚刚好 这本书是Python入门最好的书 A byte
  • Eclipse IDE for C / C++ 安装教程 之 eclipse的安装及配置

    下载eclipse 前提 安装配置好JDK 官网下载eclipse installer eclipse下载器 或者官方下载对应版本zip 优点 方便省事 缺点 下载速度比较慢 安装器是64位的 对32位的机器不太友好 或者选择 清华大学开源
  • Vue Luckyexcel 将文件流转成file文件后使用Luckysheet回显数据 - 附完整示例

    Luckysheet 一款纯前端类似excel的在线表格 功能强大 配置简单 完全开源 官方文档 快速上手 Luckysheet文档快速上手 Luckysheet文档Luckysheet 一款纯前端类似excel的在线表格 功能强大 配置简
  • Basic Level 1075 链表元素分类 (25分)

    题目 给定一个单链表 请编写程序将链表元素进行分类排列 使得所有负值元素都排在非负值元素的前面 而 0 K 区间内的元素都排在大于 K 的元素前面 但每一类内部元素的顺序是不能改变的 例如 给定链表为 18 7 4 0 5 6 10 11
  • OpenCV常用方法总结

    图像导入 import cv2 as cv src cv imread lena jpg cv namedWindow input cv WINDOW AUTOSIZE cv imshow input src cv imwrite save
  • 大事件项目

    目录 1 0 资源地址 1 项目前期的准备工作 1 1 初始化项目结构 1 2 使用GitHub管理大事件的项目 1 3 安装VSCode的Live Server插件辅助开发 2 登录注册 2 1 绘制login页面的基本结构 2 2 实现
  • 【前端】使用ffmpeg+vue3实现简单的视频编辑器

    使用ffmpeg vue3实现简单的视频编辑器 主要依赖 ffmpeg ffmpeg vue 实现功能 视频转码 添加文字水印 添加图片水印 处理进度条和用时 文件编码信息 生成序列帧 界面效果 ffmpeg演示 渲染成品 fmpeg渲染成
  • linux命令之split

    splilt命令的目的是将文件按照一定的规则切分 实战 我现在有一份文件觉得太大 想要切分 split 1000000 a1 kongke company 1000000是按照每100w行去切分 a1 是后缀只有一个 文件名称默认就是xaa
  • MySQL的count(*) ,count(1),count(id)的区别

    数据库查询相信很多人都不陌生 所有经常有人调侃程序员就是CRUD专员 这所谓的CRUD指的就是数据库的增删改查 在数据库的增删改查操作中 使用最频繁的就是查询操作 而在所有查询操作中 统计数量操作更是经常被用到 关于数据库中行数统计 无论是
  • 【Spring】Spring事务

    Spring事务 文章目录 Spring事务 0 事物的概念 1 Spring事务的配置方式 1 1编程式事务管理 1 2声明式事务管理 2 Spring事务的传播机制 3 事物的隔离级别 4 只读 5 事务超时 6 回滚规则 7 Spri
  • 【JVM篇】垃圾回收算法

    目录 1 前言 2 标记 清除算法 3 标记 整理算法 4 标记 复制算法 5 总结 1 前言 说起垃圾回收 Garbage Collection 本文简称GC 相信同时对C 和Java有了解的小伙伴都知道 C 在new完对象后 是需要手动
  • Centos7 宝塔升级swoole版本

    安装swoole 1 首先进入指定目录后下载指定swoole版本 cd usr local src wget https github com swoole swoole src archive v4 5 2 tar gz 2 下载下来后
  • linux c++ 第三章

    1 整型 int short long long long char unsigned int unsigned short 2 最值 include
  • 工作量证明如何拦截97.42%异常机器流量?

    近期休闲小游戏 羊了个羊 火爆朋友圈 这款第二关难度系数极高且带有省份和个人排名的小程序游戏甚至在最高峰时段热度指数超过了和平精英和英雄联盟 但不管是MOBA手游英雄联盟还是休闲小游戏羊了个羊 在繁荣的背后游戏外挂脚本屡见不鲜 羊了个羊游戏
  • selenium入门教程

    目录 1 安装selenium 2 安装浏览器驱动 3 添加浏览器扩展selenium ide 录制操作流程 4 导出python文件 调整脚本 运行脚本 1 安装selenium 使用python自带的包管理器pip工具就可以下载sele
  • 剑指Offer第21题(包含min函数的栈)

    本博客旨在个人总结回顾 题目描述 定义栈的数据结构 请在改类型中实现一个能够得到栈的最小元素的min函数 在改栈中 调用min push及pop的时间复杂度都是O 1 解题思路 当题目思路不清晰时可使用画图或表格来模拟步骤 并慢慢发现其中的
  • 单片机不支持printf 浮点类型的解决办法

    在一些单片机中因为资源受限官方提供的SDK中通常不提供浮点类型数据的打印 如需浮点打印功能可以参考如下做法 前提条件 1 串口通信正常 2 printf 函数已经移植完成 操作方法 1 添加以下函数到工程 以下函数的作用为将一个float类