【发布时间】:2021-04-11 04:36:34
【问题描述】:
我正在为微控制器开发 C 代码,该代码从传感器获取输入,并在字母数字字符 LCD 上输出来自传感器的数据以及其他字符串。 我通常为此使用 sprintf,但我注意到当使用 sprintf 将 floats 格式化为字符串时,它占用了太多的程序内存空间,这在微控制器上是相当低的。 (我的意思是从程序内存的 34% 直接跳到 99.2%)
所以我的问题是,有没有一种占用空间较小的方法将浮点数格式化为字符串? 我只关心方法有多简单。
我在 PIC16F877a 8 位 MCU 上使用 MPLABX IDE 和 XC8 编译器。
非常感谢。
【问题讨论】:
-
通常的解决方案是为了更小的代码占用空间而牺牲范围和最后几位数字的正确性和速度。在您发布允许的输出有多不准确和 FP 的范围有限之前,这都是猜测。 OTHO,简单的解决方案是像
"%a"(十六进制有效数)一样打印FP。这需要很少的代码。请提供详细需求。 -
@chux-ReinstateMonica,我只需要小数点后一位。数字的范围是 -40 到 +50。不幸的是,我不希望它采用十六进制格式,这是要输出到 LCD 供用户阅读的。我真的想打印这个:温度 23.4C
-
相反,将ADC结果转换为浮点数确实是个大错误。
-
小数点后只有一位,范围为-40到50,温度只有900个可能的值。这很容易用定点数学处理。
-
您在此处发布的是XY problem。您需要开始一个新问题,在其中描述您要解决的实际问题。具体来说,您从 ADC 获得了哪些值,以及这些值与温度的对应关系。
标签: c printf microcontroller