I interfaced lvgl library with my microcontroller. Everything works great, except one issue:
The flash memory footprint is high.
Here is what I found out after I integrated lvgl library into my project:
Case1: I disabled almost everything in lv_config.h:
lvgl RAM usage: 32,660 bytes
lvgl Flash usage: 170,012 bytes
Case 2: I enabled only button, and label in lv_config.h, everything else is disabled:
lvgl RAM usage: 32,664 bytes
lvgl Flash usage: 178,424 bytes
Case 3: I enabled the most common user interface objects, no animation or file system:
lvgl RAM usage: 32,984 bytes
lvgl Flash usage: 295,640 bytes
I had to add to my project 57 (.h) header files, and 74 (.c) source files from lvgl to get it to compile,
and link without errors even though I am not using most of them.
Yes, I used linker option: -gcc-sections. Adding these files is what consumes the flash…
Flash usage is the biggest problem. My micro has only 512K, so when almost 300K is used by lvgl I will have little left for my program.
The lvgl web page says: “64 kB flash and 8 kB RAM is enough for a simple user interface”
Has anyone been successful creating GUI with this footprint ?
If so, could you please share how did you do it ?
What MCU/Processor/Board and compiler are you using?
Do you use cmake? Then lvgl is build as static Lib and I experience similar size problems. When I change to build an interface Lib, the size is about half of the static lib size. So it depends heavily on the optimization.
I’m not 100% sure, but I don’t think using this option would have significant impact on the speed of the code, and the benefit of dead code simply not being included in your binary would probably be worth a minor speed reduction anyways.
It looks like those are the linker flags; they appears to already be set up correctIy.
The -ffunction-sections and -fdata-sections options are under MCU GCC Compiler → Optimization, if I recall correctly. However, I wouldn’t be surprised to find they’re already enabled in a Cube project.