Image slideshow got memory problem

Hi,

I try to change images every 3 seconds. I use the “lv_task_create(vfn_img_change, 3000, LV_TASK_PRIO_MID, NULL);” to achieve that. However, the memory increased and out of range finally. How to release memory in change another image?

I using eclipse to run pc_simulator.

Thanks.
/You code here/
static lv_obj_t *img2;

void demo_create(void)
{
lv_obj_t *wp;

wp = lv_img_create(lv_disp_get_scr_act(NULL), NULL);
lv_img_set_src(wp, &back);
lv_obj_set_protect(wp, LV_PROTECT_POS);

lv_task_create(vfn_img_change, 3000, LV_TASK_PRIO_MID, NULL);

}

void vfn_img_change(void *p)
{
if(!imgIndex)
{
vfn_card();
}
else
{
vfn_image();
}
}

void vfn_card()
{
img2 = lv_img_create(lv_scr_act(), NULL);

lv_img_set_src(img2, &card);
lv_obj_set_drag(img2, true);

}

void vfn_image()
{
img2 = lv_img_create(lv_scr_act(), NULL);

lv_img_set_src(img2, &battery);
lv_obj_set_drag(img2, true);

}

Hello!

This is because you are not 'free’ing the memory that you are allocating for the previous images before creating a new object. Try doing something like this first:

void vfn_img_change(void *p)
{
    // If img2 is already allocated, free it before creating a new object
    if (img2 != NULL)
        lv_obj_del(img2);
    img2 = lv_img_create(lv_scr_act(), NULL);
    if(!imgIndex)
    {
        lv_img_set_src(img2, &card);
    }
    else
    {
        lv_img_set_src(img2, &battery);
    }
    lv_obj_set_drag(img2, true);
}

Thanks a lot. That solve my problem. :grinning:

1 Like