CPU busy, the littevGl may be crash

Hi
my project always crash when the cpu is busy, the core dump strace is below,

#0 0xaaaaaaaaaaaaaaaa in ?? ()
#1 0x0000000000436bf8 in lv_refr_obj (obj=0x592298 <work_mem_int+3448>, mask_ori_p=0x7f985cf760)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:517
#2 0x0000000000436cfc in lv_refr_obj (obj=0x591a4c <work_mem_int+1324>, mask_ori_p=0x7f985cf7c0)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:547
#3 0x0000000000436cfc in lv_refr_obj (obj=0x5917ac <work_mem_int+652>, mask_ori_p=0x7f985cf858)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:547
#4 0x0000000000436a64 in lv_refr_obj_and_children (top_p=0x5917ac <work_mem_int+652>, mask_p=0x7f985cf858)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:459
#5 0x0000000000436894 in lv_refr_area_part (area_p=0x591670 <work_mem_int+336>)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:397
#6 0x000000000043675c in lv_refr_area (area_p=0x591670 <work_mem_int+336>)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:353
#7 0x00000000004363cc in lv_refr_areas () at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:278
#8 0x0000000000435e18 in lv_disp_refr_task (task=0x591968 <work_mem_int+1096>)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_refr.c:171
#9 0x000000000044a73c in lv_task_exec (task=0x591968 <work_mem_int+1096>)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_misc/lv_task.c:362
#10 0x000000000044a038 in lv_task_handler ()
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_misc/lv_task.c:132
#11 0x0000000000412d04 in litteVGlHandler_thread (data=0x0) at main.cpp:563
#12 0x0000007f9a4a10e8 in start_thread ()
from /home/xp/UCM630XDebug/UCM630X_V1_0_2_1/rootfs/lib/libpthread-2.26.so
#13 0x0000007f99f8392c in thread_start () at …/sysdeps/unix/sysv/linux/aarch64/clone.S:78

please give me some advise to find what happend? thanks

the littevGL verison is 6.1

I’d suggest figuring out why it ends up executing at 0xaaaaaaaaaaaaaaaa. This smells like memory corruption.

Seing multiple 0xaa is a sign of using uninitialized pointer from an lv_obj, as lv_mem_alloc() memsets the freshly allocated space by 0xaa #if LV_MEM_ADD_JUNK.

Indeed, lv_refr.c:517 is
obj->design_cb(obj, &obj_ext_mask, LV_DESIGN_DRAW_MAIN);
so it’s an attempt to refresh an object which hasn’t set design_cb.

Evan, can you please show us what are you trying to draw?

JW

PS. Reminded me of what have I seen when investigating Lv_tabview_create() with copy does not initialize ext->tab_cnt

Just draw one page and image ,and some text label, some code like here:
if(bg_img == NULL)
{
#ifdef USE_SRC_IMAGE
bg_img = lv_img_create(lv_scr_act(), NULL);
if(page == PAGE_HOME)
lv_img_set_src(bg_img, &bg_1);
else
lv_img_set_src(bg_img,&bg_2);

     lv_obj_align(bg_img, NULL, LV_ALIGN_CENTER, 0, 0);
     lv_obj_set_drag(bg_img, true);
     lv_obj_set_size(bg_img, LV_HOR_RES, LV_VER_RES);

#else
/Create a simple base object/
bg_img = lv_obj_create(lv_scr_act(), NULL);
lv_obj_set_size(bg_img, LV_HOR_RES, LV_VER_RES);
lv_obj_set_style(bg_img, &bg_style);
lv_obj_align(bg_img, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
#endif
}
#if 1
/if the line is 1 ,the page should recreate,and the prev display need clear/
if(info_page !=NULL && line == 1)
{
lv_obj_del(info_page); //clear
info_page = lv_page_create(lv_scr_act(), NULL);
lv_obj_set_size(info_page, LV_HOR_RES, LV_VER_RES);
lv_obj_align(info_page, NULL, LV_ALIGN_CENTER, 0, 0);
lv_page_set_style(info_page, LV_PAGE_STYLE_BG, &menu_bg_style);
lv_page_set_style(info_page, LV_PAGE_STYLE_SCRL, &menu_bg_style);
lv_page_set_style(info_page, LV_PAGE_STYLE_SB, &menu_bg_style);
lv_page_set_sb_mode(info_page, LV_SB_MODE_AUTO);
}

/*Create a page*/
if(info_page == NULL)
{
    info_page = lv_page_create(lv_scr_act(), NULL);
    lv_obj_set_size(info_page, LV_HOR_RES, LV_VER_RES);
    lv_obj_align(info_page, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_page_set_style(info_page, LV_PAGE_STYLE_BG, &menu_bg_style);           /*Set the scrollbar style*/
    lv_page_set_style(info_page, LV_PAGE_STYLE_SCRL, &menu_bg_style);           /*Set the scrollbar style*/
    lv_page_set_style(info_page, LV_PAGE_STYLE_SB, &menu_bg_style);           /*Set the scrollbar style*/
    lv_page_set_sb_mode(info_page, LV_SB_MODE_AUTO);                     /*Show scroll bars is scrolling is possible*/
}

lv_obj_t *label;

/*display the line content*/
label = lv_label_create(info_page, NULL);
//lv_obj_set_pos(label, 14, FONT_SIZE*(line-1)+LINE_SPACE*line);
if(page == PAGE_HOME)
    lv_label_set_style(label, LV_LABEL_STYLE_MAIN,&menu_bg_style);
else
    lv_label_set_style(label, LV_LABEL_STYLE_MAIN,&info_page_style);
lv_label_set_text(label, contentString);
lv_obj_align(label, bg_img,LV_ALIGN_IN_TOP_LEFT, 14, FONT_SIZE*(line-1)+LINE_SPACE*line);


/*display the line info*/
label = lv_label_create(info_page, NULL);
lv_label_set_style(label, LV_LABEL_STYLE_MAIN,&menu_sel_style);
lv_label_set_text(label, infoString);
lv_obj_align(label, bg_img,LV_ALIGN_IN_TOP_RIGHT, -14, FONT_SIZE*(line-1)+LINE_SPACE*line);

Can i define the LV_MEM_ADD_JUNK to 0?

static void* tick_thread(void * data)
{
(void)data;

while(1) {
    //SDL_Delay(5);   /*Sleep for 5 millisecond*/
    usleep(5000);
    //printf("tick_thread run\n");
    lv_tick_inc(5); /*Tell LittelvGL that 5 milliseconds were elapsed*/
}

return 0 ;

}

static void* litteVGlHandler_thread(void * data)
{
(void)data;

while(1) {
    //printf("tick_thread run\n");
    lv_task_handler();
    usleep(5000);
}

return 0 ;

}
int main(int argc, const char **argv)
{
pthread_t tickThread;
pthread_attr_t d;
sched_param param;

pthread_attr_init(&d);
pthread_attr_setstacksize(&d, THREAD_STACKSIZE);
pthread_attr_setdetachstate(&d, PTHREAD_CREATE_DETACHED);

/*set priority*/
pthread_attr_setschedpolicy(&d,SCHED_RR);
pthread_attr_getschedparam(&d, &param);
param.sched_priority=1;
pthread_attr_setschedparam(&d, &param);
pthread_create(&tickThread, &d, tick_thread, NULL); // LCD navigation and display.
if(lv_sdk_Init())
{
    cout << "[LCD] initFT4222 init failed !" << endl;
}
create_lv_style();

pthread_t handlerThread;
pthread_attr_t f;
pthread_attr_init(&f);
pthread_attr_setschedpolicy(&f,SCHED_RR);
pthread_attr_getschedparam(&f, &param);
param.sched_priority=0;
pthread_attr_setschedparam(&f, &param);
pthread_attr_setstacksize(&f, THREAD_STACKSIZE);
pthread_attr_setdetachstate(&f, PTHREAD_CREATE_DETACHED);
pthread_create(&handlerThread, &f, litteVGlHandler_thread, NULL); // update the lcd

while (1)
{
    /* update the network info */
    usleep(5000);

}

return 0;

}

Please help me to check the tick hander and task_handler ,thanks!

(gdb) p obj
$5 = {par = 0x591a4c <work_mem_int+1324>, child_ll = {n_size = 128, head = 0x0, tail = 0x0}, coords = {x1 = 0,
y1 = 0, x2 = 100, y2 = 66}, event_cb = 0xaaaaaaaaaaaaaaaa, signal_cb = 0xaaaaaaaaaaaaaaaa,
design_cb = 0xaaaaaaaaaaaaaaaa, ext_attr = 0xaaaaaaaaaaaaaaaa, style_p = 0xaaaaaaaaaaaaaaaa,
group_p = 0xaaaaaaaaaaaaaaaa, ext_click_pad = {x1 = 0, y1 = 0, x2 = 0, y2 = 0}, click = 0 ‘\000’,
drag = 1 ‘\001’, drag_throw = 0 ‘\000’, drag_parent = 1 ‘\001’, hidden = 0 ‘\000’, top = 1 ‘\001’,
opa_scale_en = 0 ‘\000’, parent_event = 1 ‘\001’, drag_dir = 2 ‘\002’, reserved = 42 '
’,
protect = 170 ‘\252’, opa_scale = 170 ‘\252’, ext_draw_pad = 0, realign = {base = 0x0, xofs = 0, yofs = 0,
align = 0 ‘\000’, auto_realign = 0 ‘\000’, origo_align = 1 ‘\001’}, user_data = 0xaaaaaaaaaaaaaaaa}

other refresh page thread statck,
#0 lv_ll_init (ll_p=0x591a54 <work_mem_int+1332>, node_size=128)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_misc/lv_ll.c:52
#1 0x00000000004321e0 in lv_obj_create (parent=0x5917ac <work_mem_int+652>, copy=0x0)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_core/lv_obj.c:222
#2 0x0000000000443864 in lv_cont_create (par=0x5917ac <work_mem_int+652>, copy=0x0)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_objx/lv_cont.c:69
#3 0x00000000004460e0 in lv_page_create (par=0x5917ac <work_mem_int+652>, copy=0x0)
at /AA-GIT/UCM630X/Modules_RK/gui_code/lvgl/src/lv_objx/lv_page.c:79
#4 0x0000000000417d44 in lcdFrameBuffer::build_home_info_page (this=0x349bc390, page=PAGE_HOME,
contentString=0x349bc680 “Model”, infoString=0x349bc880 “UCM6302 V1.2B”, line=1) at main.cpp:2387
#5 0x000000000041b730 in lcdFrameBuffer::buildPage (this=0x349bc390, page=PAGE_HOME, line=2) at main.cpp:3166
#6 0x00000000004204f8 in lcdFrameBuffer::writeFrameBuffer (this=0x349bc390, page=PAGE_HOME, line=1)
at main.cpp:4100
#7 0x0000000000416678 in refresh (id=0x0) at main.cpp:1803
#8 0x0000007f7adc50e8 in start_thread ()
from /home/xp/UCM630XDebug/UCM630X_V1_0_2_1/rootfs/lib/libpthread-2.26.so
#9 0x0000007f7a8a792c in thread_start () at …/sysdeps/unix/sysv/linux/aarch64/clone.S:78

Can you show also the parent (dereference obj.par)?

I don’t see anything suspicious in the code but I am not an LVGL expert.

JW