用LCD习惯了,一般先sprintf到字符串,然后再printf打印字符串。 感谢大家的回复。问题解决了。在IAR设置里,有对 printf 的设置,默认是不支持浮点数的。修改选项后便可。如下:
toofree 发表于 2018-2-27 22:01
对IAR不熟,会一点。
用LCD习惯了,一般先sprintf到字符串,然后再printf打印字符串。 ...
先使用如下代码 sprintf 再打印字符串也是不可以的。输出结果为 %f * * * *
void printf_float(float a)
{
char tmp={0};
int i;
sprintf(tmp, "%f", a);
for(i=0; i<8; i++)
printf("%c", tmp);
printf("\n");
}
问题解决了,见#13 nyszx 发表于 2018-2-27 21:14
附上官方地址吧:http://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f- ...
感谢,不过应该不是这个问题吧。我没用任何OS。
问题解决了,见#13 maxtch 发表于 2018-2-27 18:34
看来 IAR 的 printf 把打印浮点给精简掉了。这块代码的确是很占地方,我平时用 GCC + newlib 一般也是用去 ...
感谢你的提示,确实是 IAR 默认的 printf 输出不支持浮点,修改选项后便可。 pythonworld 发表于 2018-2-27 18:37
打印浮点数比较耗费内存,有些编译器需要加option,具体看看编译器的帮助。
感谢回复,确实需要修改 IAR 设置 拆开就可以了啊,没必要这么麻烦,把一个float拆成两个int类型的整数部分和小数部分,其中ADC_Final_Result是float型,ADC_Final_Result_d和ADC_Final_Result_f是uint16_t ADC_Final_Result = ADC_Result_Sum * 3.358 / 4095 / 8; //基准3.358V
/* 因为sprintf不能输出float型变量,拆成两个int输出 */
ADC_Final_Result_d = (uint16_t)ADC_Final_Result; //整数部分
ADC_Final_Result -= ADC_Final_Result_d; //减去整数
ADC_Final_Result_f = (uint16_t)(ADC_Final_Result * 1e03); //保留三位小数
sprintf(cBuffer, "Voltage = %d.%03dV", ADC_Final_Result_d, ADC_Final_Result_f);
OLED_Print(cBuffer, 4);
xmstudio 发表于 2018-2-28 10:49
拆开就可以了啊,没必要这么麻烦,把一个float拆成两个int类型的整数部分和小数部分,其中ADC_Final_Result ...
拆开是可以。
页:
1
[2]