硬汉嵌入式论坛

 找回密码
 立即注册
查看: 132|回复: 4
收起左侧

[功能建议] 对RTT打印浮点数的建议

[复制链接]

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 前天 20:17 来自手机 | 显示全部楼层 |阅读模式
目前要在 RTT Viewer 里显示浮点数,单片机必须先用 sprintf 或自己写的函数把 float 转成字符串。 这对资源受限的系统有两个坏处:

    代码体积:链接浮点格式化库会吃掉 1-3KB 的 Flash,对小容量芯片(如 M0)很致命。

    性能:在单片机上做“二进制转 ASCII”的数学运算很费 CPU,可能会影响高频控制回路的实时性。

(建议方案) :我建议引入“主机端浮点解析”机制。 单片机不再发送字符串 "123.456",而是直接发送 4字节的原始二进制数据,外加一个转义字符或标记。RTT Viewer 收到后,由电脑负责把它算成数字并显示出来。
回复

使用道具 举报

1

主题

80

回帖

83

积分

初级会员

积分
83
发表于 前天 21:19 | 显示全部楼层
本帖最后由 dukelec 于 2025-11-19 21:22 编辑

esp32 idf 就支持你说的这种 binary logging 做法:
https://docs.espressif.com/proje ... html#binary-logging

但是这种做法兼容性不太好,如果我使用了它这个功能,我只能用 idf 去看打印,不方便用其它串口调试工具看 log


我一般是用宏把 float 转成整数部分和小数部分两个整型,然后通过打印整数的方式打印小数:

[C] 纯文本查看 复制代码
#define P_2F(x) (int)(x), abs((int)(((x)-(int)(x))*100))  // "%d.%.2d"
#define P_3F(x) (int)(x), abs((int)(((x)-(int)(x))*1000)) // "%d.%.3d"

// 示范: printf("float val: %d.%.2d\n", P_2F(2.14));




如果要更高效的显示 float 型数据,则使用波形显示功能更合适,float 型数据是原始数据发到上位机解析:

https://forum.anfulai.cn/forum.p ... 30080&fromuid=85792

(不排除以后我这个上位机的 log 打印功能也增加 binary logging 功能)





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 昨天 09:57 | 显示全部楼层
如果是资源受限的小容量芯片,不推荐用浮点,它处理不过来,推荐用定点数,专门为这种小容量,不带硬件浮点的芯片而生。
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 昨天 12:01 | 显示全部楼层
eric2013 发表于 2025-11-20 09:57
如果是资源受限的小容量芯片,不推荐用浮点,它处理不过来,推荐用定点数,专门为这种小容量,不带硬件浮点 ...

所以说能否把这个处理过程放到上位机上?单片机只发送数据。就像vofa的justfloat协议一样,把浮点数的十六进制发送到电脑端,电脑处理
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 昨天 12:08 | 显示全部楼层
NJCBY2024 发表于 2025-11-20 12:01
所以说能否把这个处理过程放到上位机上?单片机只发送数据。就像vofa的justfloat协议一样,把浮点数的十 ...

好的,我先收录下,不过暂时还没有添加计划。因为这种还得需要用户按照指定的协议方式发送,不方便。

等后面不忙了,干脆给RTT也弄个串口桥接,大家使用那个串口软件方便,那个串口软件带这种功能,使能那个串口软件就行,简单省事些。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 23:06 , Processed in 0.045568 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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