SEGGER 的实时传输 (RTT) 是一种用于嵌入式应用程序中交互式用户 I/O 的技术。它以非常高的性能结合了 SWO 和半主机的优势。但是在笔者使用时(RTT v758版本),其暂时不支持浮点数打印的功能。我们可以通过修改源码添加该功能。

  1. 跳转到RTT>SEGGER_RTT_printf.c>SEGGER_RTT_vprintf(unsigned, const char*, va_list*)函数中。

  2. 找到原代码中判断输出类型的部分,是使用switch-case判断类型的。

      //
    // Handle specifiers
    //
    switch (c) {
    case 'c': {
    char c0;
    v = va_arg(*pParamList, int);
    c0 = (char)v;
    _StoreChar(&BufferDesc, c0);
    break;
    }
    case 'd':
    v = va_arg(*pParamList, int);
    _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 'u':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 'x':
    case 'X':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 's':
    {
    const char * s = va_arg(*pParamList, const char *);
    do {
    c = *s;
    s++;
    if (c == '\0') {
    break;
    }
    _StoreChar(&BufferDesc, c);
    } while (BufferDesc.ReturnValue >= 0);
    }
    break;
    case 'p':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
    break;
    case '%':
    _StoreChar(&BufferDesc, '%');
    break;
    default:
    break;
    }
  3. 将该部分代码略作修改,添加打印浮点数的部分。默认输出两位浮点数。

      //
    // Handle specifiers
    //
    switch (c) {
    case 'c': {
    char c0;
    v = va_arg(*pParamList, int);
    c0 = (char)v;
    _StoreChar(&BufferDesc, c0);
    break;
    }
    case 'd':
    v = va_arg(*pParamList, int);
    _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 'u':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 'x':
    case 'X':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
    break;
    case 's':
    {
    const char * s = va_arg(*pParamList, const char *);
    do {
    c = *s;
    s++;
    if (c == '\0') {
    break;
    }
    _StoreChar(&BufferDesc, c);
    } while (BufferDesc.ReturnValue >= 0);
    }
    break;
    case 'p':
    v = va_arg(*pParamList, int);
    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
    break;
    case '%':
    _StoreChar(&BufferDesc, '%');
    break;
    // 添加输出浮点数的功能。默认带两位小数。
    case 'f':
    case 'F': {
    float fv = (float)va_arg(*pParamList, double); // 取出输入的浮点数值
    if(fv < 0) _StoreChar(&BufferDesc, '-'); // 判断正负号
    v = abs((int)fv); // 取正整数部分
    _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); //显示整数
    _StoreChar(&BufferDesc, '.'); //显示小数点
    v = abs((int)(fv * 100));
    v = v % 100;
    _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后两位
    break;
    }
    default:
    break;
    }

SEGGER_RTT_printf()函数添加打印浮点数功能的更多相关文章

  1. shopnc 商家中心添加打印商品二维码功能

    需求中提到需要增加每一件商品可以打印,用于线下体验店实体商品的二维码标签,客人可以根据手机扫二维码功能进行购买 任务描述: 1.如附件实现”批量打印标签“和单个商品”打印“标签功能. 2.标签有两种” ...

  2. 2------------NLPIR(ICTCLAS2016)分词系统添加用户词典功能

    备注:win7 64位系统,netbeans编程 基本代码框架参见我的另一篇文章:NLPIR分词功能 代码实现: package cwordseg; import java.io.Unsupporte ...

  3. 为Pythonic论坛添加一个“专题”功能(续)

    上篇博文<为Pythonic论坛添加一个“专题”功能>,在模板的层次上对发帖进行了限制.也就是根据用户是否拥有权限来决定是否显示发帖框. 但是自从这么“投机取巧”的写完模板后,整夜辗转反侧 ...

  4. WPF实现打印用户界面功能2

    帮助类: using System; using System.Drawing.Printing; using System.IO; using System.Windows.Forms; names ...

  5. jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 用汇编语言给XP记事本添加“自动保存”功能 good

    [文章标题]: 用汇编语言给XP记事本添加“自动保存”功能 [文章作者]: newjueqi [作者邮箱]:zengjiansheng1@126.com [作者QQ]:190678908 [使用工具] ...

  7. 【ABAP系列】SAP ABAP实现发送外部邮件(添加附件)功能

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP实现发送外部邮件(添 ...

  8. [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

    前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...

  9. jquery each函数 break和continue功能

    jquery each函数 break和continue功能幸运的是另一个突破,持续一个jQuery循环方式.你可以打破在函数返回一个jQuery参数虚假循环.一个可以继续执行只是在做不指定返回值或返 ...

  10. 百度地图API 批量添加 带检索功能的信息窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 关于 verilator 中 config.vlt 等配置文件的使用

    参考网页:https://verilator.org/guide/latest/exe_verilator.html#configuration-files 注意,在使用 config.vlt 配置文 ...

  2. Comparator与Comparable实现List中某一对象属性排序

    //实体类实现 Comparable接口 进行降序排序 public class TestCompare implements Comparable<TestCompare>{ priva ...

  3. leetcode 98. 验证二叉搜索树 【一遍dfs】【时间击败99.72%】【内存击败94.23%】

    复用left[],[时间击败73.33%]-->[时间击败99.72%] [内存击败36.17%]-->[内存击败94.23%] dfs(r)返回值=new long[]{包括r节点的子树 ...

  4. FSCapture怎么取色

    启动软件后 点击setting->Screen color Picker 此时箭头会变为一个吸管形状, 选择要吸取的颜色,点击鼠标左键 出现如图所示 完了复制这个十六进制颜色值

  5. JS 将伪数组转换成数组

    在 JS 中,伪数组 是非常常见的,它也叫 类数组.伪数组可能会给 JS 初学者带来一点困扰. 本文将详细讲解 什么是伪数组,以及分别在 ES5 和 ES6 中将伪数组转换成真正的数组 . 什么是伪数 ...

  6. Python Cli 编写指南

    Python Cli 编写指南 python实现cli 环境: python 3.8 库 python自带argparse 指南 简单示例 : cli.py import argparse def c ...

  7. java中获取指定日期是周几

    可以使用Calendar日历工具类获取,代码如下: Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); ...

  8. 机器学习——常见的backbone

    参考链接:https://www.zhihu.com/question/396811409/answer/1252521120 LeNet:5层轻量级网络,一般用来验证小型数据: AlexNet/VG ...

  9. libev中的gcc内嵌函数

    在学习libev的过程中,遇到了大量的gcc内嵌函数,大多是为了提升性能而使用的,这里做一个汇总和介绍,并会持续更新 1.__builtin_expect:该函数是gcc引入的,为的是让程序员讲最有可 ...

  10. bzoj 3669

    思想基本同bzoj 2594,但是多了一步 首先我们发现这时的边有两个属性了,因此我们考虑先去掉其中一者的限制 我们把所有边按$a$大小排序,然后从小到大加入维护的最小生成树 每次加边时都按照$b$的 ...