Hi, using a NUCLEO_L432KC with GCC. The standard printf or snprintf calls do not produce any floating point output.
If I switch the implementation to the minimal printf they do, however I need width padding. I don’t see any errors about exceeded flash size. What gives?
Printing floating point numbers is disabled in Mbed OS 6 by default. If you need width padding then try to build with the
std library. Read
here for more info.
Best regards, Zoltan
Yes, I’m aware. As I mentioned I’ve set:
This does not provide me with a working floating point output. If I select the minimal printf but enable floating point output I do get the results I expect, but I am unable to do padding. I need padding.
The standard printf implementation is bugged. When enabled it will not do floating point output.
Are you using bare_metal? Then newlib-nano is used where floats are disabled by default.
Then what is the point of offering the minimal printf and the std printf? The lack of float, padding, etc, should be the domain of the minimal printf.
I’m not budging on this being a bug due to the subversion of expectations. If the standard printf is still going to be highly nonstandard then they should make that very obvious.
Until I can get confirmation this is intentional it seems the easiest path forward is reimplementing the padding.
The std setting is using the printf that is provided by the c-library, nothing Mbed specific. So with bare_ metal, additional compiler switches are needed for float support. With RTOS, the full newlib is used and printf works with all options.
I’m compiling with rtos.h included and using threads and intend to use the RTOS features. Do I need to do anything else to enable the full newlib?
no, with a mbed_app.json that Zoltan has shown in his link, it must work.
To reduce the code size Mbed introduced
Minimal printf and snprintf. As of Mbed OS 6.0 it is enabled by default. Floating point parameters are only present when minimal-printf-enable-floating-point config is set to true (disabled by default). I’m not sure but this could be the case when building with the online compiler. If your application requires more advanced functionality (at the cost of using more flash memory) you can switch to the standard printf library configuring it in m…