nyszx 发表于 2018-2-27 21:14:53

附上官方地址吧:http://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f-on-arm/

toofree 发表于 2018-2-27 22:01:18

对IAR不熟,会一点。
用LCD习惯了,一般先sprintf到字符串,然后再printf打印字符串。

C_YANG_HEN 发表于 2018-2-28 09:43:05

感谢大家的回复。问题解决了。在IAR设置里,有对 printf 的设置,默认是不支持浮点数的。修改选项后便可。如下:

C_YANG_HEN 发表于 2018-2-28 09:45:19

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

C_YANG_HEN 发表于 2018-2-28 09:46:22

nyszx 发表于 2018-2-27 21:14
附上官方地址吧:http://www.iar.com/support/tech-notes/general/problems-with-printf-floating-point-f- ...

感谢,不过应该不是这个问题吧。我没用任何OS。

问题解决了,见#13

C_YANG_HEN 发表于 2018-2-28 09:47:35

maxtch 发表于 2018-2-27 18:34
看来 IAR 的 printf 把打印浮点给精简掉了。这块代码的确是很占地方,我平时用 GCC + newlib 一般也是用去 ...

感谢你的提示,确实是 IAR 默认的 printf 输出不支持浮点,修改选项后便可。

C_YANG_HEN 发表于 2018-2-28 09:48:01

pythonworld 发表于 2018-2-27 18:37
打印浮点数比较耗费内存,有些编译器需要加option,具体看看编译器的帮助。

感谢回复,确实需要修改 IAR 设置

xmstudio 发表于 2018-2-28 10:49:30

拆开就可以了啊,没必要这么麻烦,把一个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);

C_YANG_HEN 发表于 2018-2-28 14:28:00

xmstudio 发表于 2018-2-28 10:49
拆开就可以了啊,没必要这么麻烦,把一个float拆成两个int类型的整数部分和小数部分,其中ADC_Final_Result ...

拆开是可以。
页: 1 [2]
查看完整版本: STM32 无法打印%f