amobbs.com 阿莫电子技术论坛

标题: [求助] LVGL, 滑动时花屏 [打印本页]

作者: tomzbj    时间: 2024-4-10 11:32
标题: [求助] LVGL, 滑动时花屏
如图, 点击三个按钮切换页面完全正常, 滑动就会局部花屏, 左右滑动和上下滑动花得还不一样...

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

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

LVGL版本是8.3.11


作者: tomzbj    时间: 2024-4-10 11:35
补充: spi+dma传输前后加__disable_irq, __enable_irq, 也花;
三个按钮不用自定义图标, 改成普通文本, 内置字体, 也花
作者: tim    时间: 2024-4-10 11:43
先换块屏试试
作者: 了无    时间: 2024-4-10 11:50
是什么片子,有没有数据cache,先关闭dcache试试
作者: tomzbj    时间: 2024-4-10 12:07
了无 发表于 2024-4-10 11:50
是什么片子,有没有数据cache,先关闭dcache试试
(引用自4楼)

gd32f303cgt6, 没有cache...
作者: brother_yan    时间: 2024-4-10 12:14
花屏首先应该降频试试
作者: tomzbj    时间: 2024-4-10 13:04
brother_yan 发表于 2024-4-10 12:14
花屏首先应该降频试试
(引用自6楼)

哦, 降频已经试过了, 一样 @@
作者: Flyback    时间: 2024-4-10 14:20
早先移植emwin遇到过类似问题,检查读显存接口试一试
作者: ackyee    时间: 2024-4-10 14:44
感觉是内存溢出了
作者: Elex    时间: 2024-4-10 16:00
可能设定滑动范围的边界出了问题。
比如,你平时点击刷新图标的时候可能只需要更新部分图标位置,写的数据可讷讷个比较少。但你滚动的时候可能需要整个屏幕刷新显示屏,由于内存大小等原因限制,可能写显示屏的函数是分开几个块顺序写的,
滚屏的时候刷屏请求有可能内存请求分配失败而没有作处理,写了错误地址的内容进去就花屏了
作者: tomzbj    时间: 2024-4-10 18:43
Elex 发表于 2024-4-10 16:00
可能设定滑动范围的边界出了问题。
比如,你平时点击刷新图标的时候可能只需要更新部分图标位置,写的数据 ...
(引用自10楼)

嗯, 明天在dma写屏函数里把地址和写入数量打印出来看看...
作者: akey3000    时间: 2024-4-10 19:12
内存分配大些试试
作者: yyts    时间: 2024-4-10 20:10
不使用DMA试试。
作者: tomzbj    时间: 2024-4-11 15:35
找到问题了, 我这里刷屏用第一种方式, 给10行的缓存, 实测发现刷全屏时都是按一次10行, 刷个别控件时会小范围刷若干行, 按缓存大小来用.
但是滑动时偶尔会一次刷全屏30行或者40行, 结果就出界了.
在disp_write里手动加个判断:
  1.     uint32_t count = (area->y2 - area->y1) * MY_DISP_HOR_RES
  2.         + (area->x2 - area->x1);
  3.     if(count > disp_drv->draw_buf->size)
  4.         count = disp_drv->draw_buf->size;
  5.     disp_write((unsigned short*)color_p, count);
复制代码


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

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


作者: tomzbj    时间: 2024-4-11 15:41
切8.3.10, 8.3.8, 都一样...
作者: tomzbj    时间: 2024-4-11 15:46
打开Log, 这行是有问题的

继续追查...

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

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

嗯, 关键是得有那么大RAM...
我这个是480*222的屏, 全屏得200多k ram了.
作者: akey3000    时间: 2024-4-12 10:07
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
akey3000 发表于 2024-4-12 10:07
336k ram,156m主频,1m flash,8元
(引用自20楼)

啥型号啊? esp32之类么
作者: akey3000    时间: 2024-4-12 18:16
tomzbj 发表于 2024-4-12 17:42
啥型号啊? esp32之类么
(引用自21楼)


散户可能还买不到,某模拟大厂新推的




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4