Tasks issues cause blinking screen

Hi everyone. I’m trying to run an LVGL task currently alongside a USB task and am experiencing issues with a blue blinking screen. I think is a problem of priority but don’t know who to fix it.

What I’ve tried:

  • Changing task priorities
  • Adding vTaskDelay()
  • Adding mutex (lv_lock())

Others informations:

  • Freertos tickrate: 1000Hz
  • Refresh rate: 33ms
  • LV_MEM 128kb
    Code:

void usb_host_task(void *param) {
    (void) param;
     printf("TinyUSB Init\r\n");
    init_tinyusb();
    while (1) {
      lv_lock();
      tuh_task();
      lv_unlock();
      vTaskDelay(5);
    }
}

void lvgl_task(void *pvParameters) {
    while (1) {
        lv_lock();
        ui_tick();
        lv_unlock();
        
        uint32_t time_till_next;
        time_till_next = lv_timer_handler();
        if(time_till_next == LV_NO_TIMER_READY) time_till_next = LV_DEF_REFR_PERIOD; 
        
        vTaskDelay(5);
    }
}

void init_screen(void)
{
    ESP_LOGI(TAG, "Init Screen...");
    bsp_display_cfg_t cfg = {
        .lvgl_port_cfg = ESP_LVGL_PORT_INIT_CONFIG(),
        .buffer_size = BSP_LCD_DRAW_BUFF_SIZE,
        .double_buffer = BSP_LCD_DRAW_BUFF_DOUBLE,
        .flags = {
            .buff_dma = true,
            .buff_spiram = false,
            .sw_rotate = false,
        }
    };
    lv_display_t *display = bsp_display_start_with_config(&cfg);

    // LVGL needs a system tick to know elapsed time for animations and other tasks.
    lv_tick_set_cb(xTaskGetTickCount);
    bsp_display_backlight_on();
    lv_lock();
    ui_init();
    lv_unlock();

    TaskHandle_t lvgl_task_handle;
    xTaskCreate(lvgl_task, "LVGL_Task", 16384, NULL, 5, &lvgl_task_handle);
}

void initTask(void *pvParameters)
{
    esp_err_t err;

    esp_err_t err = nvs_flash_init();
    if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        err = nvs_flash_init();
    }

    init_screen();
    usb_init();  
    xTaskCreateStatic(usb_host_task, "usbh", USB_STACK_SIZE, NULL, configMAX_PRIORITIES-5, usb_stack, &usb_taskdef);
    set_var_loading_status("Loading programs and files...");
    print_dev_conf();
    init_fs();

    set_var_loading_status("Inizializing network services...");
    err = esp_event_loop_create_default();
    if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
        ESP_ERROR_CHECK(err);
    }
    err = esp_netif_init();
    if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
        ESP_ERROR_CHECK(err);
    }

    init_net();
    set_var_loading_status("Initialization complete");
    set_var_boot_finished(true);

    vTaskDelete(NULL);
}

void app_main(void)
{
    xTaskCreate(initTask, "InitTask", 8192, NULL, 10, &init_task);
}

what are tuh_task() & ui_tick() ?