arm-none-eabi-gcc : Printing float number using pr

2020-06-18 03:18发布

I am writing a C program for SAM3N arm cortex-M3 microcontroller. When I try to print float numbers, it just prints 'f'. Example: printf("%f",43.12); prints f only, not the 43.12.

But printing with integers works fine.

How to enable full printing of floats? I know that the compiler, by default, disabled float printing to reduce code size (i.e. seems, they linked cut-down version). Also please note that, there is no CFLAGS=-Dprintf=iprintf used in makefile.

Tools details:

  • ARM/GNU C Compiler : (crosstool-NG 1.13.1 - Atmel build: 13) 4.6.1
  • Above tool come with Atmel studio 6.0.

标签: c gcc arm printf
3条回答
不美不萌又怎样
2楼-- · 2020-06-18 03:23

In compilers where floats are disabled by default, it is unusual that the default libraries can handle them. Look through your references and you will find information on how to recompile the appropriate libraries with float support, or (more likely) where to find a version that has already been built with it.

查看更多
够拽才男人
3楼-- · 2020-06-18 03:31

It can be so that your platform/libs does not support %f format specifier for printf/sprintf. As a first approach you can roll your own printf for floats/doubles:

void printDouble(double v, int decimalDigits)
{
  int i = 1;
  int intPart, fractPart;
  for (;decimalDigits!=0; i*=10, decimalDigits--);
  intPart = (int)v;
  fractPart = (int)((v-(double)(int)v)*i);
  if(fractPart < 0) fractPart *= -1;
  printf("%i.%i", intPart, fractPart);
}
查看更多
一夜七次
4楼-- · 2020-06-18 03:33

Can you try, adding the below option in linker settings

-lc -lrdimon -u _printf_float

and it worked for me in ARM-CORTEXM0

查看更多
登录 后发表回答