tomzbj 发表于 2024-4-10 11:32:18

[求助] LVGL, 滑动时花屏

如图, 点击三个按钮切换页面完全正常, 滑动就会局部花屏, 左右滑动和上下滑动花得还不一样...

跑官方例子也一样, 点击按钮都完全正常, 滑动就花.   windows上用sdl跑模拟器则完全正常, 不花屏.

有没有哪位遇到过类似情况的?

LVGL版本是8.3.11

tomzbj 发表于 2024-4-10 11:35:38

补充: spi+dma传输前后加__disable_irq, __enable_irq, 也花;
三个按钮不用自定义图标, 改成普通文本, 内置字体, 也花

tim 发表于 2024-4-10 11:43:24

先换块屏试试{:titter:}

了无 发表于 2024-4-10 11:50:43

是什么片子,有没有数据cache,先关闭dcache试试

tomzbj 发表于 2024-4-10 12:07:18

了无 发表于 2024-4-10 11:50
是什么片子,有没有数据cache,先关闭dcache试试
(引用自4楼)

gd32f303cgt6, 没有cache...

brother_yan 发表于 2024-4-10 12:14:51

花屏首先应该降频试试

tomzbj 发表于 2024-4-10 13:04:26

brother_yan 发表于 2024-4-10 12:14
花屏首先应该降频试试
(引用自6楼)

哦, 降频已经试过了, 一样 @@

Flyback 发表于 2024-4-10 14:20:41

早先移植emwin遇到过类似问题,检查读显存接口试一试

ackyee 发表于 2024-4-10 14:44:22

感觉是内存溢出了

Elex 发表于 2024-4-10 16:00:05

可能设定滑动范围的边界出了问题。
比如,你平时点击刷新图标的时候可能只需要更新部分图标位置,写的数据可讷讷个比较少。但你滚动的时候可能需要整个屏幕刷新显示屏,由于内存大小等原因限制,可能写显示屏的函数是分开几个块顺序写的,
滚屏的时候刷屏请求有可能内存请求分配失败而没有作处理,写了错误地址的内容进去就花屏了

tomzbj 发表于 2024-4-10 18:43:22

Elex 发表于 2024-4-10 16:00
可能设定滑动范围的边界出了问题。
比如,你平时点击刷新图标的时候可能只需要更新部分图标位置,写的数据 ...
(引用自10楼)

嗯, 明天在dma写屏函数里把地址和写入数量打印出来看看...

akey3000 发表于 2024-4-10 19:12:57

内存分配大些试试

yyts 发表于 2024-4-10 20:10:57

不使用DMA试试。

tomzbj 发表于 2024-4-11 15:35:30

找到问题了, 我这里刷屏用第一种方式, 给10行的缓存, 实测发现刷全屏时都是按一次10行, 刷个别控件时会小范围刷若干行, 按缓存大小来用.
但是滑动时偶尔会一次刷全屏30行或者40行, 结果就出界了.
在disp_write里手动加个判断:
    uint32_t count = (area->y2 - area->y1) * MY_DISP_HOR_RES
      + (area->x2 - area->x1);
    if(count > disp_drv->draw_buf->size)
      count = disp_drv->draw_buf->size;
    disp_write((unsigned short*)color_p, count);

这样倒是不花了, 但是还是会有显示错位的问题.

难道是lvgl的bug? 切回8.3.10试试.

tomzbj 发表于 2024-4-11 15:41:52

切8.3.10, 8.3.8, 都一样...

tomzbj 发表于 2024-4-11 15:46:36

打开Log, 这行是有问题的

继续追查...

tomzbj 发表于 2024-4-11 16:25:37

我了个去, 还是上面计算count有误, 改成count = (area->y2 - area->y1 + 1) * (area->x2 - area->x1 + 1))就彻底解决了.
惭愧惭愧, 之前某次已经改好了, 结果这次是从某个旧项目里copy过来的结果又把对的给覆盖成错的了

ackyee 发表于 2024-4-12 08:38:38

缓存方式 我都用全图缓存,并且 不用赋图,直接把数组的地址丢出去 直接就OK了

tomzbj 发表于 2024-4-12 09:16:07

ackyee 发表于 2024-4-12 08:38
缓存方式 我都用全图缓存,并且 不用赋图,直接把数组的地址丢出去 直接就OK了 ...
(引用自18楼)

嗯, 关键是得有那么大RAM...
我这个是480*222的屏, 全屏得200多k ram了.

akey3000 发表于 2024-4-12 10:07:44

tomzbj 发表于 2024-4-12 09:16
嗯, 关键是得有那么大RAM...
我这个是480*222的屏, 全屏得200多k ram了.
(引用自19楼)

336k ram,156m主频,1m flash,8元

tomzbj 发表于 2024-4-12 17:42:25

akey3000 发表于 2024-4-12 10:07
336k ram,156m主频,1m flash,8元
(引用自20楼)

啥型号啊? esp32之类么

akey3000 发表于 2024-4-12 18:16:41

tomzbj 发表于 2024-4-12 17:42
啥型号啊? esp32之类么
(引用自21楼)

散户可能还买不到,某模拟大厂新推的
页: [1]
查看完整版本: [求助] LVGL, 滑动时花屏