Floating point I/O in GCC for MSP430

Greetings. I am using GCC v3.3 compiler for MSP430. I can't get uprintf() to work for floating point variables. Here is example code:

float i, k, m; i = 20.125f; k = 20.125F; m = 2.0125E+1;

uprintf( serial_out, "%F \r\n", i ); uprintf( serial_out, "%F \r\n", k ); uprintf( serial_out, "%2.2E \r\n", m ); uprintf( serial_out, "%g \r\n", m );

Compiler messages:

analog9.c:259: warning: double format, float arg (arg 3) analog9.c:261: warning: double format, float arg (arg 3) analog9.c:263: warning: double format, float arg (arg 3) analog9.c:265: warning: double format, float arg (arg 3)

The people who did the port for the MSP430 say; that floating point is a work in progress but I don't know if my problem is due to missing facilities. I can perform floating point arithmetic and view the results using GDB, but it won't print. The msp-gcc manual says floating point operations work for type float but not type double. By declaring the variables as float and using the f suffix, I think the variables must be type float, but the compiler messages suggest that they are type double. I am puzzled. Help and suggestions appreciated. JC

Reply to
Joseph Casey
Loading thread data ...

I am not using GCC, but I suspect that you may need to wait until doubles are fixed. Standard C operation with the printf family (I am not familiar with uprintf), with variable number of parameters, is to do default promotion of parameter types, which includes converting float parameters to doubles. The warnings above appear to be about those normal promotions.

I suspect you need to wait until the code for the floating point to decimal converter is fixed, or write your own.

Thad

Reply to
Thad Smith

'Sounds painful, but since my application is restricted - no negative numbers and limited range - it might be doable. Some pages such as

formatting link
may give me enough explanation to do it. Thanks. JC

Reply to
Joseph Casey

If the range is narrow enough, you can convert the number to integers for both the whole and fractional parts:

#include #include

float f; int fi,ff;

fi = f; ff = abs((f-fi)*10000); printf ("f=%d.%04d\n", fi, ff);

That would work for values [INT_MIN].9999 to [INT_MAX].9999

Thad

Reply to
Thad Smith

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.