Lv_tlsf_check, integrity_walker

Description

Error Info

[Error]        (2883.305, +0)   lv_tlsf_check: Asserted at expression: !sl_map && "second-level map must be null"      (in lv_tlsf.c line #886)
[Error]        (3947.765, +0)   integrity_walker: Asserted at expression: integ->prev_status == this_prev_status && "prev status incorrect"    (in lv_tlsf.c line #859)

I created a thread to change the image that displaying.

I think there are some confilcts of resource access. if so, We shouldn’t access and modify the lvgl widget resource in other place.

What MCU/Processor/Board and compiler are you using?

Windows

What LVGL version are you using?

V8

What do you want to achieve?

Image Switch

What have you tried so far?

  1. execute the function update_img in timer_cb
  2. execute the function update_img in a thread.

Code to reproduce

// simulation platform:Windows
void update_img(lv_timer_t *tm) {
  static uint32_t count = 0;
  count++;
  switch (count % 6) {
    case 0:
      lv_img_set_src(img_test, "S:F:/Picture/Cocacola1.jpg");
      break;
    case 1:
      lv_img_set_src(img_test, "S:F:/Picture/Cocacola2.jpg");
      break;
    case 2:
      lv_img_set_src(img_test, "S:F:/Picture/Cocacola3.jpg");
      break;
    case 3:
      lv_img_set_src(img_test, "S:F:/Picture/g-liulian-1-2.jpg");
      break;
    case 4:
      lv_img_set_src(img_test, "S:F:/Picture/Cowork.jpg");
      break;
    case 5:
      lv_img_set_src(img_test, "S:F:/Picture/flight.jpg");
      break;
    default:
      lv_img_set_src(img_test, "S:F:/Picture/aaaaaa.png");
      break;
  } 
}

I think you need to define a mutex and take it before calling the lv_task_handler function and no need to say to release it after that.
So then in other threads, you can work with LVGL objects when this mutex is released.
for more info take a look at this link.

Thanks very mush for you reply. It is helpful

1 Like