有没有比使用sprintf将浮点数格式化为字符串更节省空间的方法?

我正在为微控制器开发 C 代码,该代码从传感器获取输入并在字母数字字符 LCD 上输出来自传感器的数据以及其他字符串。我通常为此使用 sprintf,但我注意到当使用 sprintf 将浮点数格式化为字符串时,它占用了太多的程序内存空间,这在微控制器上是相当低的。(太多我的意思是从程序内存的 34% 直接跳到 99.2%)

所以我的问题是,是否有一种占用空间较少的方法来将浮点数格式化为字符串?我只关心方法有多简单。

我在 PIC16F877a 8 位 MCU 上使用带有 XC8 编译器的 MPLABX IDE。

非常感谢。

回答

有没有比使用 sprintf 将浮点数格式化为字符串更节省空间的方法?
...代码从传感器获取输入,并输出来自传感器的数据以及字母数字字符上的其他字符串

根本不要使用浮点数。 @用户3386109

来自传感器的读数肯定是一个整数。使用整数数学将该读数转换为 deci-degrees C,然后打印。

TMP235示例

Temperature  Output
-40 C         100
  0 C         500
150 C        2000

#define SCALE_NUM ((int32_t)(150 - -40) * 10)
#define SCALE_DEM (2000 - 100)
#define OFFSET    (500)

int temperature_raw = temperature_sensor();
int temperature_decidegreesC = (temperature_raw - OFFSET)*SCALE_NUM/SCALE_DEN;
send_integer(temperature_decidegreesC/10);
send_char('.');
send_char(abs(temperature_decidegreesC/10) + '0');

可以有其他改进,但避免 FP 变量和数学并使用整数数学是关键。


以上是有没有比使用sprintf将浮点数格式化为字符串更节省空间的方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>