Hello, I’m using mbed os 5 with platformio ide to program a stm32f103c8t6 with 64kb of flash memory (the same on bluepill board). If I compile by default take over 30k of flash (about 50.3%). Is it possible to use a lightweight version of framework? (I checked and I use -Os to comile the code).
Thanks in advance.
Hello Niccolò,
Yes, it is possible to use a lightweight version of framework called Mbed OS bare metal profile.
I have published some examples which could help you get started:
EDIT: After some modifications to the mbed_app.json
the Bare metal with EventQueue on Bluepill
seems to work. So here is the link again:
Bare metal with EventQueue on Bluepill
To further reduce the amount of used Flash memory the examples above feature the newlib-nano
library (for instance printf
does not work for float
types). If you’d like to use the default one remove
"target.c_lib" : "small"
from the mbed_app.json
project config file.
WARNING: The examples above are not intended to be compiled with the online compiler. Please have a look at Bluepill board support for Mbed OS 6 how to compile them offline with mbed-cli.
Best regards, Zoltan
Hello!
Thank you very much for your exhaustive reply!
Is it possible to integrate Mbed bare metal in platformio? Thanks very much!
I’m sorry Niccolò, I don’t have any experience with platformio. Perhaps someone else can hep you with that.
Best regards, Zoltan
Hi there,
that is probably a question for PlatformIO web but accoridng to PlatformIO documentation, it looks same, as Zoltan described.
However, it seems like the PlatformIO use bare metal in default.
PlatformIO allows compiling projects with or without Mbed OS. By default, project is built without the OS feature.
BR, Jan
Thank you all very much!
Yes I’m reading the documentation provided by @hudakz and one on platformio and it seems to be possible!
Best regards,
Niccolò
Hello,
After some modifications to the mbed_app.json
the Bare metal with EventQueue on Bluepill seems to work too.
With the newlib-nano
library the binary is smaller but printf
does not work for float
.
Below is a function I usually use instead. It has a smaller footprint and it rounds the result as needed:
void printf(float val, int fraDigs = 1, bool newline = false)
{
char sign = val < 0 ? '-' : '\0';
val = val < 0 ? -val : val;
int mult = 1;
for (int i = 0; i < fraDigs; i++)
mult *= 10;
float flt = val * mult;
int intPart = rintf(flt) / mult;
int d = val;
mult = 1;
for (int i = 0; i < fraDigs; i++)
mult *= 10;
flt = val * mult - d * mult;
int fraPart = rintf(flt);
if (fraDigs == 0)
printf("%c%d", sign, intPart);
else
printf("%c%d.%01d", sign, intPart, fraPart);
if (newline)
printf("\r\n");
}
Best regards, Zoltan