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

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

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

    1. //
    2. // Handle specifiers
    3. //
    4. switch (c) {
    5. case 'c': {
    6. char c0;
    7. v = va_arg(*pParamList, int);
    8. c0 = (char)v;
    9. _StoreChar(&BufferDesc, c0);
    10. break;
    11. }
    12. case 'd':
    13. v = va_arg(*pParamList, int);
    14. _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
    15. break;
    16. case 'u':
    17. v = va_arg(*pParamList, int);
    18. _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
    19. break;
    20. case 'x':
    21. case 'X':
    22. v = va_arg(*pParamList, int);
    23. _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
    24. break;
    25. case 's':
    26. {
    27. const char * s = va_arg(*pParamList, const char *);
    28. do {
    29. c = *s;
    30. s++;
    31. if (c == '\0') {
    32. break;
    33. }
    34. _StoreChar(&BufferDesc, c);
    35. } while (BufferDesc.ReturnValue >= 0);
    36. }
    37. break;
    38. case 'p':
    39. v = va_arg(*pParamList, int);
    40. _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
    41. break;
    42. case '%':
    43. _StoreChar(&BufferDesc, '%');
    44. break;
    45. default:
    46. break;
    47. }
  3. 将该部分代码略作修改,添加打印浮点数的部分。默认输出两位浮点数。

    1. //
    2. // Handle specifiers
    3. //
    4. switch (c) {
    5. case 'c': {
    6. char c0;
    7. v = va_arg(*pParamList, int);
    8. c0 = (char)v;
    9. _StoreChar(&BufferDesc, c0);
    10. break;
    11. }
    12. case 'd':
    13. v = va_arg(*pParamList, int);
    14. _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
    15. break;
    16. case 'u':
    17. v = va_arg(*pParamList, int);
    18. _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
    19. break;
    20. case 'x':
    21. case 'X':
    22. v = va_arg(*pParamList, int);
    23. _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
    24. break;
    25. case 's':
    26. {
    27. const char * s = va_arg(*pParamList, const char *);
    28. do {
    29. c = *s;
    30. s++;
    31. if (c == '\0') {
    32. break;
    33. }
    34. _StoreChar(&BufferDesc, c);
    35. } while (BufferDesc.ReturnValue >= 0);
    36. }
    37. break;
    38. case 'p':
    39. v = va_arg(*pParamList, int);
    40. _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
    41. break;
    42. case '%':
    43. _StoreChar(&BufferDesc, '%');
    44. break;
    45. // 添加输出浮点数的功能。默认带两位小数。
    46. case 'f':
    47. case 'F': {
    48. float fv = (float)va_arg(*pParamList, double); // 取出输入的浮点数值
    49. if(fv < 0) _StoreChar(&BufferDesc, '-'); // 判断正负号
    50. v = abs((int)fv); // 取正整数部分
    51. _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); //显示整数
    52. _StoreChar(&BufferDesc, '.'); //显示小数点
    53. v = abs((int)(fv * 100));
    54. v = v % 100;
    55. _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后两位
    56. break;
    57. }
    58. default:
    59. break;
    60. }

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. WC2023 游记

    不是很会写游记,随便写写吧. 一些附件 讲课资料合集(压缩后 \(\rm 31MB\))太大了,可以去 U 群下载. 由于后面很多乐子,我把相关内容打包成 zip 上传上来了. 乐子合集下载链接.(这 ...

  2. Android-AccessibilityService

    概述 AccessibilityService用于提供辅助功能服务,其在后台运行,并在触发AccessibilityEvents时由系统接收回调.此类事件表示用户界面中的某些状态转换,例如,焦点更改, ...

  3. 1144. 递减元素使数组呈锯齿状 (Medium)

    问题描述 1144. 递减元素使数组呈锯齿状 (Medium) 给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1. 如果符合下列情况之一,则数组 A 就是 锯齿数组: ...

  4. UCF Local Programming Contest 2018 C. First Last Sorting 思维、简单DP

    C. First Last Sorting链接:https://nanti.jisuanke.com/t/44141

  5. java三级菜单遍历

    java 三级菜单遍历 @Override public List<YjztCity> getYjzt(){ List<YjztCity> yjztCities = yjztC ...

  6. css实现文字多余显示省略号

    只显示一行文字 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 显示多行文字 word-break:break-all; ...

  7. 杭电oj 素数判定

    Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数.   I ...

  8. Linux一键单机部署和集群部署

    整个部署脚本只用执行sh即可,有需要可以联系我. 一.部署类型 可参考:常见的部署类型(停机部署.蓝绿部署.滚动部署.灰度部署.AB测试等) 二.一键单机部署Docker服务 三.一键单机部署原生服务 ...

  9. el-table 如果文字过多展示...

    1 <el-table-column label="任务名称" width="120px" align="center" :show- ...

  10. Java-Java数据类型对应MySql数据类型

    开发过程中常用的数据类型:   Java Mysql 备注 整型 java.lang.Integer tinyint(m) 1个字节  范围(-128~127)  java.lang.Integer ...