Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

esp_lvgl_port这个组件如何不添加官方的屏幕初始化使用 (BSP-427) #265

Closed
Szeroy opened this issue Dec 29, 2023 · 6 comments

Comments

@Szeroy
Copy link

Szeroy commented Dec 29, 2023

Add screen这个例子里面使用了esp_lcd_new_panel_io_spi和esp_lcd_new_panel_st7789然后调用 disp_handle = lvgl_port_add_disp(&disp_cfg);来进行初始化lvgl的显示,但是我现在不希望用官方的屏幕初始化,因为我自己写好了屏幕的驱动,就想放进lvgl_port_flush_callback这个函数里面刷新屏幕,请问这个应该怎么操作,还是说我只能自己在重新移植一遍lvgl?

@github-actions github-actions bot changed the title esp_lvgl_port这个组件如何不添加官方的屏幕初始化使用 esp_lvgl_port这个组件如何不添加官方的屏幕初始化使用 (BSP-427) Dec 29, 2023
@Szeroy
Copy link
Author

Szeroy commented Dec 29, 2023

我尝试把关于屏幕初始化这个注释掉,然后刷新函数里面准备放自己的代码,但是直接卡住是什么原因?

esp_err_t ret = ESP_OK;
lv_disp_t *disp = NULL;
lv_color_t *buf1 = NULL;
lv_color_t *buf2 = NULL;
assert(disp_cfg != NULL);
// assert(disp_cfg->io_handle != NULL);
// assert(disp_cfg->panel_handle != NULL);
assert(disp_cfg->buffer_size > 0);
assert(disp_cfg->hres > 0);
assert(disp_cfg->vres > 0);

/* Display context */
lvgl_port_display_ctx_t *disp_ctx = malloc(sizeof(lvgl_port_display_ctx_t));
ESP_GOTO_ON_FALSE(disp_ctx, ESP_ERR_NO_MEM, err, TAG, "Not enough memory for display context allocation!");
// disp_ctx->io_handle = disp_cfg->io_handle;
// disp_ctx->panel_handle = disp_cfg->panel_handle;
disp_ctx->rotation.swap_xy = disp_cfg->rotation.swap_xy;
disp_ctx->rotation.mirror_x = disp_cfg->rotation.mirror_x;
disp_ctx->rotation.mirror_y = disp_cfg->rotation.mirror_y;
static void lvgl_port_flush_callback(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map)
{
    assert(drv != NULL);
    lvgl_port_display_ctx_t *disp_ctx = (lvgl_port_display_ctx_t *)drv->user_data;
    assert(disp_ctx != NULL);

    const int offsetx1 = area->x1;
    const int offsetx2 = area->x2;
    const int offsety1 = area->y1;
    const int offsety2 = area->y2;

    printf("1---\n");
    // copy a buffer's content to a specific area of the display
    // esp_lcd_panel_draw_bitmap(disp_ctx->panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, color_map);
}

这个是日志

I (377) gpio: GPIO[14]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (384) gpio: GPIO[13]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (913) gpio: GPIO[18]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (913) gpio: GPIO[12]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (920) gpio: GPIO[0]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (929) gpio: GPIO[11]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (939) gpio: GPIO[9]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (948) gpio: GPIO[35]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (957) gpio: GPIO[8]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (966) gpio: GPIO[7]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (1984) LVGL: Starting LVGL task
1---
E (7384) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (7384) task_wdt:  - IDLE0 (CPU 0)
E (7384) task_wdt: Tasks currently running:
E (7384) task_wdt: CPU 0: LVGL task
E (7384) task_wdt: CPU 1: IDLE1
E (7384) task_wdt: Print CPU 0 (current core) backtrace


Backtrace: 0x4203C52E:0x3FC93500 0x40376CED:0x3FC93530 0x42016C59:0x3FCAE920 0x420177C3:0x3FCAE9E0 0x4201BA16:0x3FCAEA60 0x42032C72:0x3FCAEA90
0x4203c52e: task_wdt_timeout_handling at D:/esp-idf/esp-idf-5.1v/Espressif/frameworks/esp-idf-v5.1/components/esp_system/task_wdt/task_wdt.c:461
 (inlined by) task_wdt_isr at D:/esp-idf/esp-idf-5.1v/Espressif/frameworks/esp-idf-v5.1/components/esp_system/task_wdt/task_wdt.c:585

0x40376ced: _xt_lowint1 at D:/esp-idf/esp-idf-5.1v/Espressif/frameworks/esp-idf-v5.1/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1240

0x42016c59: draw_buf_flush at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/core/lv_refr.c:1284
 (inlined by) refr_area_part at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/core/lv_refr.c:798

0x420177c3: refr_area at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/core/lv_refr.c:680
 (inlined by) refr_invalid_areas at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/core/lv_refr.c:618
 (inlined by) _lv_disp_refr_timer at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/core/lv_refr.c:325

0x4201ba16: lv_timer_exec at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/misc/lv_timer.c:313
 (inlined by) lv_timer_handler at D:/MyProject/e-ink-screen/software/managed_components/lvgl__lvgl/src/misc/lv_timer.c:109

0x42032c72: lvgl_port_task at D:/MyProject/e-ink-screen/software/components/espressif__esp_lvgl_port/esp_lvgl_port.c:692


E (12384) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (12384) task_wdt:  - IDLE0 (CPU 0)
E (12384) task_wdt: Tasks currently running:
E (12384) task_wdt: CPU 0: LVGL task
E (12384) task_wdt: CPU 1: IDLE1
E (12384) task_wdt: Print CPU 0 (current core) backtrace

@Lzw655
Copy link
Collaborator

Lzw655 commented Dec 31, 2023

Hi @Szeroy, 在直接使用 esp_lvgl_port 组件的情况下,是需要采用乐鑫官方的 LCD 驱动,如果你的屏幕是 SPI/RGB 接口,可以参考文档进行移植。在使用自定义驱动(非官方接口)的情况下,可以参考例程移植 LVGL。

@Lzw655
Copy link
Collaborator

Lzw655 commented Dec 31, 2023

这个问题很有可能是没有调用 lv_disp_flush_ready(disp_drv); 函数来通知 LVGL 可以进行继续运行,否则 LVGL 会如你 LOG 显示循环死等导致任务看门狗超时,请确保在每次刷屏完成后(如 SPI 的 post_cb())调用该函数,如示例所示。

@Szeroy
Copy link
Author

Szeroy commented Jan 1, 2024

这个问题很有可能是没有调用 函数来通知 LVGL 可以进行继续运行,否则 LVGL 会如你 LOG 显示循环死等导致任务看门狗超时,请确保在每次刷屏完成后(如 SPI 的 )调用该函数,如示例所示。lv_disp_flush_ready(disp_drv);``post_cb()

我现在把lvgl_port_flush_ready这个函数加进去是不会死机了,不过我现在换了个例程,是用idf里面自带的lvgl例子,两个例子差不多,现在还有一个问题,我想显示在单色屏幕上面,我把他配置成单色然后把缓冲区打印出来全是1,如果换成8bit色彩是有值的,这个是什么原因?

static void example_lvgl_flush_cb(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map)
{
    esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)drv->user_data;
    int offsetx1 = area->x1;
    int offsetx2 = area->x2;
    int offsety1 = area->y1;
    int offsety2 = area->y2;

    printf("offsetx1 = %d,offsetx2 = %d,offsety1 = %d,offsety2 = %d\n", offsetx1, offsetx2, offsety1, offsety2);
    if (offsetx1 != 0 && offsetx1 != 199)
    {
        for (size_t i = 0; i < offsety2 - offsety1; i++)
        {
            for (size_t j = 0; j < (offsetx2 - offsetx1); j++)
            {
                printf("%02x", ((char *)color_map)[i * (offsetx2 - offsetx1) + j + i]);
            }
            printf("\n");
        }
        printf("\n");
    }

    // display.setPartialWindow(offsetx1, offsety1, offsetx2, offsety2);
    // display.firstPage();
    // display.drawInvertedBitmap(offsetx1, offsety1, (uint8_t *)color_map, offsetx2, offsety2, 0);
    // display.nextPage();
    // copy a buffer's content to a specific area of the display
    // esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, color_map);

    // display.drawBitmap(offsetx1, offsety1, framebuffer, offsetx2, offsety2, GxEPD_BLACK);
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    lvgl_port_flush_ready(disp);
}

这个是设置成1bit打印的

offsetx1 = 120,offsetx2 = 199,offsety1 = 153,offsety2 = 199
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101

这个是设置成8bit打印的

offsetx1 = 120,offsetx2 = 199,offsety1 = 153,offsety2 = 199
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff929292929292929292929292929292929292929292929292929292929292ffffffff92929292929292ffffffffffffff9292ffffffffffff9292929292ffffffffff92929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292ffffff9292ffff929292929292ffff92929292929292ffff929292ffffff9292ffff929292ff92929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292ff929292929292ffff92929292929292ffff9292929292ff9292ff929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292ff929292929292ffff92929292929292ffff9292929292ff9292ffff9292929292929292
ffffffffffffffffff929292929292929292929292929292929292929292929292929292929292929292ffff929292929292ffff92929292929292ffff9292929292ff929292ffffff929292929292
ffffffffffffffffff9292929292929292929292929292929292929292929292929292929292929292ffff92929292929292ffffffffffffff9292ffff92929292ffff9292929292ffffff92929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292ffff9292929292929292ffff92929292929292ffffffffffffff9292929292929292ffff929292
ffffffffffffffffff929292929292929292929292929292929292929292929292929292929292ffff929292929292929292ffff92929292929292ffff9292929292929292929292929292ff929292
ffffffffffffffffff9292929292929292929292929292929292929292929292929292929292ffff92929292929292929292ffff92929292929292ffff9292929292929292ffff929292ffff929292
ffffffffffffffffff9292929292929292929292929292929292929292929292929292929292ffffffffffffff9292929292ffff92929292929292ffff929292929292929292ffffffffff92929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff9292929292ffffffff9292929292ffffffff92929292ffffff92929292ff9292929292929292929292ffffffff929292ffffffffffff92929292ffff9292929292ffff929292
ffffffffffffffffff92929292ffff9292ffff929292ffff9292ffff929292ff9292ff929292ff929292929292929292ffffff9292ffff9292ffff929292ffffff9292ffff9292929292ffff929292
ffffffffffffffffff929292ffff92929292ffff92ffff92929292ffff9292929292ff9292ff929292929292929292ffff9292929292929292ffff9292929292ff9292ffff9292929292ffff929292
ffffffffffffffffff929292ffff92929292ffff92ffff92929292ffff9292ff9292ff92ff92929292929292929292ff929292929292929292ffff9292929292ff9292ffff9292929292ffff929292
ffffffffffffffffff92929292ff929292ffffff9292ff929292ffffff929292ffff9292ff92ffff92929292929292ff929292929292929292ffff9292929292ff9292ffff9292929292ffff929292
ffffffffffffffffff9292929292ffffffffffff929292ffffffffffff929292929292ff92ff9292ff929292929292ff929292929292929292ffff92929292ffff9292ffff9292929292ffff929292
ffffffffffffffffff929292929292929292ffff92929292929292ffff9292929292ff9292ff9292ff929292929292ff929292929292929292ffffffffffffff929292ffff9292929292ffff929292
ffffffffffffffffff929292929292929292ff9292929292929292ff929292929292ff9292ff9292ff929292929292ffff9292929292929292ffff929292929292929292ff9292929292ff92929292
ffffffffffffffffff92929292929292ffffff929292929292ffffff9292929292ff929292ff9292ff92929292929292ffffff9292ffff9292ffff929292929292929292ffffff92ffffff92929292
ffffffffffffffffff92929292ffffffff9292929292ffffffff929292929292ff9292929292ffff92929292929292929292ffffffff929292ffff92929292929292929292ffffffffff9292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292
ffffffffffffffffff92929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292

这个是我初始化的代码,感觉好像没什么问题的样子

void Lvgl_Task(void *arg)
{
    static lv_disp_draw_buf_t disp_buf; // contains internal graphic buffer(s) called draw buffer(s)
    static lv_disp_drv_t disp_drv;      // contains callback functions
    lvgl = xSemaphoreCreateMutex();

    // ESP_LOGI(TAG, "Initialize SPI bus");
    // spi_bus_config_t buscfg = {
    //     .sclk_io_num = EXAMPLE_PIN_NUM_PCLK,
    //     .mosi_io_num = EXAMPLE_PIN_NUM_DATA0,
    //     .miso_io_num = -1,
    //     .quadwp_io_num = -1,
    //     .quadhd_io_num = -1,
    //     .max_transfer_sz = EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES * sizeof(uint16_t),
    // };
    // ESP_ERROR_CHECK(spi_bus_initialize(LCD_HOST, &buscfg, SPI_DMA_CH_AUTO));

    // ESP_LOGI(TAG, "Install panel IO");
    // esp_lcd_panel_io_handle_t io_handle = NULL;
    // esp_lcd_panel_io_spi_config_t io_config = {
    //     .dc_gpio_num = EXAMPLE_PIN_NUM_DC,
    //     .pclk_hz = EXAMPLE_LCD_PIXEL_CLOCK_HZ,
    //     .lcd_cmd_bits = EXAMPLE_LCD_CMD_BITS,
    //     .lcd_param_bits = EXAMPLE_LCD_PARAM_BITS,
    //     .cs_gpio_num = EXAMPLE_PIN_NUM_CS,
    //     .spi_mode = 0,
    //     .trans_queue_depth = 10,
    //     .on_color_trans_done = example_notify_lvgl_flush_ready,
    //     .user_ctx = &disp_drv,
    // };
    // // Attach the LCD to the SPI bus
    // ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi((esp_lcd_spi_bus_handle_t)LCD_HOST, &io_config, &io_handle));

    // ESP_LOGI(TAG, "Install ssd1681 panel driver");
    // esp_lcd_panel_handle_t panel_handle = NULL;
    // esp_lcd_panel_dev_config_t panel_config = {
    //     .reset_gpio_num = EXAMPLE_PIN_NUM_RST,
    //     .color_space = ESP_LCD_COLOR_SPACE_RGB,
    //     .bits_per_pixel = 16,
    // };
    // ESP_ERROR_CHECK(esp_lcd_new_panel_ssd1681(io_handle, &panel_config, &panel_handle));
    // ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    // ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));

    ESP_LOGI(TAG, "Initialize LVGL library");
    lv_init();
    // alloc draw buffers used by LVGL
    // it's recommended to choose the size of the draw buffer(s) to be at least 1/10 screen sized
    uint8_t *buf1 = (uint8_t *)malloc(EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES * sizeof(uint8_t));
    assert(buf1);
    uint8_t *buf2 = (uint8_t *)malloc(EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES * sizeof(uint8_t));
    assert(buf2);
    // initialize LVGL draw buffers
    lv_disp_draw_buf_init(&disp_buf, buf1, NULL, EXAMPLE_LCD_H_RES * EXAMPLE_LCD_V_RES);

    ESP_LOGI(TAG, "Register display driver to LVGL");
    lv_disp_drv_init(&disp_drv);
    disp_drv.hor_res = EXAMPLE_LCD_H_RES;
    disp_drv.ver_res = EXAMPLE_LCD_V_RES;
    disp_drv.flush_cb = example_lvgl_flush_cb;
    disp_drv.draw_buf = &disp_buf;
    // disp_drv.user_data = panel_handle;
    disp = lv_disp_drv_register(&disp_drv);

    ESP_LOGI(TAG, "Install LVGL tick timer");
    // Tick interface for LVGL (using esp_timer to generate 2ms periodic event)
    const esp_timer_create_args_t lvgl_tick_timer_args = {
        .callback = &example_increase_lvgl_tick,
        .name = "lvgl_tick"};
    esp_timer_handle_t lvgl_tick_timer = NULL;
    ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer));
    ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_tick_timer, EXAMPLE_LVGL_TICK_PERIOD_MS * 1000));

    // lv_port_fs_init();

    xSemaphoreTake(lvgl, portMAX_DELAY);
    // ui_init();
    xSemaphoreGive(lvgl);
    while (1)
    {
        // raise the task priority of LVGL and/or reduce the handler period can improve the performance
        vTaskDelay(pdMS_TO_TICKS(10));
        // The task running lv_timer_handler should have lower priority than that running `lv_tick_inc`
        xSemaphoreTake(lvgl, portMAX_DELAY);
        lv_timer_handler();
        xSemaphoreGive(lvgl);
    }
}

之后我把整个缓冲区都打印出来了,单色模式所有值都是1

@espressif2022
Copy link
Contributor

espressif2022 commented Jan 2, 2024

单色模式,有没有注册 disp_drvset_px_cb 回调?
disp_ctx->disp_drv.set_px_cb = lvgl_port_pix_monochrome_callback;

@Szeroy
Copy link
Author

Szeroy commented Jan 8, 2024

单色模式,有没有注册 disp_drvset_px_cb 回调?
disp_ctx->disp_drv.set_px_cb = lvgl_port_pix_monochrome_callback;

是这个问题,谢谢啦

@Szeroy Szeroy closed this as completed Jan 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants