【问题标题】:Stm32 printf float variablestm32 printf 浮点变量
【发布时间】:2015-04-04 17:53:46
【问题描述】:

我想通过 usart 从 stm32f405 注销。 在我的 syscall.c 文件中,我实现了通过 usart 打印的功能:

int _write(int file, char *ptr, int len)
{
    int todo;
    for (todo = 0; todo < len; todo++)
    {
    usart_send_char( *ptr++ );
    }
    return len;
}

函数usart_send_char( *ptr++ ); 按预期工作。但是当我打电话时:

printf("%s, %d, %3.2f\r\n", "asd", 777, 13.2 );

我得到: asd, 777, 0.00 浮点变量未正确打印。

生成文件:

PROCESSOR = -mcpu=cortex-m4 -mthumb -mfloat-abi=softfp -mfpu=fpv4-sp-d16
CFLAGS += $(PROCESSOR) $(INCLUDES) $(STFLAGS) -Wall -fno-strict-aliasing $(C_PROFILE)
LDFLAGS = $(PROCESSOR) -Wl,-Map=$(PROG).map,--cref,--gc-sections

使用的编译器:

Sourcery CodeBench Lite 2014.05-28

我错在哪里?

【问题讨论】:

  • 你有两个正确答案。请为其中一个投票并标记此问题已解决。

标签: printf stm32


【解决方案1】:

要启用 sprintf 中的浮点数,请将 -u _printf_float 添加到您的项目中,如图所示。

【讨论】:

    【解决方案2】:

    我没有为 STM32F4 使用 Sourcery Codebench gcc,但使用 GCC ARM Embedded toolchain,默认情况下不启用 printf 中的浮点支持。要启用,请将-u _printf_float 添加到您的 LDFLAGS。

    【讨论】:

      【解决方案3】:
      1. 我不确定,但我认为 mfloat-abi-flag 必须为 CFLAGS。
      2. STM32F4有一个FPU,那为什么要用mfloat-abi=soft呢?你不能使用 mfloat-abi=hard 吗?
      3. 如果你不需要经常计算浮点值,你可以这样做。

      代码示例:

       int i = 132;
       printf("Result is: %d.%d", i/10, i%10);
      

      【讨论】:

        猜你喜欢
        • 2011-04-24
        • 2013-08-26
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多