有没有比使用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 变量和数学并使用整数数学是关键。