Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c

gcc

printf

arm

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.
like image 753
Prabhu Avatar asked Oct 03 '12 06:10

Prabhu


2 Answers

Can you try, adding the below option in linker settings

-lc -lrdimon -u _printf_float

and it worked for me in ARM-CORTEXM0

like image 87
Shanmugasundaram Viswanathan Avatar answered Nov 18 '22 22:11

Shanmugasundaram Viswanathan


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);
}
like image 4
Agnius Vasiliauskas Avatar answered Nov 18 '22 22:11

Agnius Vasiliauskas