Hello dear developers,
I have tested these two codes. One would do its job, the other hangs. I don’t understand why.
The one which works.
ScreenMain = lv_obj_create( NULL);
static lv_style_t styleMain;
lv_style_init(&styleMain);
lv_style_set_bg_color(&styleMain, lv_color_black());
lv_obj_add_style(ScreenMain, &styleMain,0);
lv_scr_load_anim(ScreenMain,LV_SCR_LOAD_ANIM_NONE, 1000, 100, true);
The one which hangs.
ScreenMain = lv_obj_create( NULL);
static lv_style_t* styleMain;
lv_style_init(styleMain);
lv_style_set_bg_color(styleMain, lv_color_black());
lv_obj_add_style(ScreenMain, styleMain,0);
lv_scr_load_anim(ScreenMain,LV_SCR_LOAD_ANIM_NONE, 1000, 100, true);
The pointer version is just an uninitialized pointer, which will be null in your case. That’s why it crashes.
You mean this is a NULL pointer problem? So what does lv_style_init() do in the pointer version? And why this doesn’t happen in case of objects (widgets)?
In case of static lv_style_t* styleMain;
the variable is no initialized. Its value can be 0x0 (NULL
), 12873178145, or anything, but most probably something invalid. Therefore lv_style_init
tries to initialize the data on an invalid address.
You could do this to make it work:
lv_style_t* styleMain = malloc(sizeof(lv_style_t)); //Now points to an allocated data
lv_obj_t *
is always initialized by a “create” function. But in case of styles there is no lv_style_create
function because styles are just simple variables not as complicated as widgets.
Thank you @kisvegabor and @embeddedt. It seems I need to dig into the document and code.