V6.0.2 update to V8.0.1 devices work abnormal

Important: unclear posts may not receive useful answers.

Before posting

  • Get familiar with Markdown to format and structure your post
  • Be sure to update lvgl from the latest version from the master branch.
  • Read the

Delete this section if you read and applied the mentioned points.


I have a devices which runs a project based on lvgl-V6.0.2 version, and now I update the lvgl library to V8.0.1 and run some demo on it(I display a image and run the docs example lv_example_btn_1()), and I found it has some problem. The image is shown successfully, but the button example, when I clicked the btn , the screen start flashing, and the botton effect seems not occur.

my disp is inited double buffering, is there double buffering has some different between V8.0.1 and V6.0.2

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


What do you want to achieve?

What have you tried so far?

I have checked the porting steps from my 6.0.2 version project, it has ported to the 8.0.1version succesfuly. the same initial, the same devices.

Code to reproduce

Add the relevant code snippets here.

The code block(s) should be between ```c and ``` tags:

/*You code here*/

Screenshot and/or video

If possible, add screenshots and/or videos about the current state.

Well. The draw_buf in v8.0 need to be setting with static, did u do that?
Heres the blog of release v8.0.

of course

 /* Example for 3) also set disp_drv.full_refresh = 1 below*/
    static lv_disp_draw_buf_t draw_buf_dsc_3;
    static lv_color_t buf_3_1[MY_DISP_HOR_RES * MY_DISP_VER_RES];            /*A screen sized buffer*/
    static lv_color_t buf_3_2[MY_DISP_HOR_RES * MY_DISP_VER_RES];            /*An other screen sized buffer*/
    lv_disp_draw_buf_init(&draw_buf_dsc_3, buf_3_1, buf_3_2, MY_DISP_HOR_RES * MY_DISP_VER_RES);   /*Initialize the display buffer*/

     * Register the display in LVGL

    static lv_disp_drv_t disp_drv;                         /*Descriptor of a display driver*/
    lv_disp_drv_init(&disp_drv);                    /*Basic initialization*/

    /*Set up the functions to access to your display*/

    /*Set the resolution of the display*/
    disp_drv.hor_res = MY_DISP_HOR_RES;
    disp_drv.ver_res = MY_DISP_VER_RES;

    /*Used to copy the buffer's content to the display*/
    disp_drv.flush_cb = disp_flush;

    /*Set a display buffer*/
    disp_drv.draw_buf = &draw_buf_dsc_3;

    /*Required for Example 3)*/
    //disp_drv.full_refresh = 1

    /* Fill a memory array with a color if you have GPU.
     * Note that, in lv_conf.h you can enable GPUs that has built-in support in LVGL.
     * But if you have a different GPU you can use with this callback.*/
    //disp_drv.gpu_fill_cb = gpu_fill;

    /*Finally register the driver*/

hey, I find the fault in my code. It should open disp_drv.full_refresh = 1. I add this condition then it work ok

okay. but full refresh sounds like need do more work, does it effect the frame rate?

No, it works well after I add disp_drv.full_refresh = 1., I had already run 2 examples in my devices

As you discovered v8 changed the behavior for two full-screen buffers. You can restore behavior closer to v7 by enabling full_refresh.