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

2020-06-18 02:56发布

问题:

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.

回答1:

Can you try, adding the below option in linker settings

-lc -lrdimon -u _printf_float

and it worked for me in ARM-CORTEXM0



回答2:

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);
}


回答3:

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.



标签: c gcc arm printf