您尚未登录。

#1 2021-02-23 22:29:24 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

SSD20X直接编译lvgl7.10带双缓(附源码)

如题,上周末应晕哥邀请解决下小问题。
启明云端的群有挺多群友需要这个东西。硬件平台是7寸 1024x600 的ssd202 开发板,自带一个点菜系统的demo
这里直接打包发送网盘:

链接: https://pan.baidu.com/s/117lyj1uTXC-Rt66Co07wLA
提取码:fkk5

释放后在配置好交叉编译器的条件下可以直接make出来,可执行文件是 demossd
上传在这儿

demossd.zip

几个细节注意下:
1、注意下我的代码的Makefile 依赖 SSD20X的源代码的project文件夹,
结构是这样的:

├── LVGL7.10-SSD202
│   ├── export-ssd20x-gcc.sh
│   ├── gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf
│   ├── linux_frame_buffer
├── project

2、释放出来代码后阅读下Makefile 或者修改一下自己的结构让它可以调用到project 的目录。
3 、另外ssd20x 这个平台比较不一样, 使用fb之前要配置硬件信息,
我是无脑直接搬运来用,可以阅读一下 sstardisp.c, 我直接搬运ssd20x 开发板源码的 JpegPlayer
4、这个LVGL7.10 的lv_demo_music 被我改了些参数,下拉窗大小和原装的demo程序不一样。 我就不改回去了反正就是改着玩的。

5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)

FB_BUFFER_LEN = 4800


好了编译跑一下飞起来吧。

视频是跑printer demo 的效果




以下由 @哇酷小管家 从楼主百度网盘下载
------------------------------------
本站下载: LVGL7.10-linux_framebuffer-SSD202-TEVET-PACK-20210223.tar.7z (约65M)

最近编辑记录 TeveT (2021-02-23 23:48:29)

离线

#2 2021-02-24 09:17:07 分享评论

wlcccccc
会员
注册时间: 2019-12-06
已发帖子: 60
积分: 59.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

大佬牛皮的飞起

离线

#3 2021-02-24 20:39:20 分享评论

fogwizard
会员
注册时间: 2019-03-19
已发帖子: 34
积分: 29

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

在大神的热心帮助下demo跑起来了,滑动的时候几乎没有撕裂感,比单缓冲好了几条街!

离线

#4 2021-02-24 20:54:15 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

不会有撕裂的,你可以用手机超级慢动作拍一下就知道了,

fogwizard 说:

在大神的热心帮助下demo跑起来了,滑动的时候几乎没有撕裂感,比单缓冲好了几条街!

离线

#5 2021-02-25 10:11:56 分享评论

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,004
积分: 997.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧

离线

#6 2021-02-25 10:16:58 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么

达克罗德 说:

光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧

离线

#7 2021-02-25 10:50:31 分享评论

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,004
积分: 997.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

TeveT 说:

嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么

达克罗德 说:

光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧

就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.c

If you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.

根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync

离线

#8 2021-02-25 11:21:53 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

高手,学习了

达克罗德 说:
TeveT 说:

嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么

达克罗德 说:

光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧

就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.c

If you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.

根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync

离线

#9 2021-02-27 16:36:44 分享评论

SigmaStarStudy
会员
注册时间: 2021-02-15
已发帖子: 34
积分: 34

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

感谢楼主指导, 终于搞定,

这一步一定要做:

5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)

FB_BUFFER_LEN = 4800

离线

#10 2021-02-28 12:27:52 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

哈哈哈哈,真的,搞这个需要开脑洞
不过怎么感觉你这个号是晕哥的马甲?

SigmaStarStudy 说:

感谢楼主指导, 终于搞定,

这一步一定要做:

5、注意修改双缓的缓冲区大小
要修改 /config/fbdev.ini 修改缓冲区到2倍的大小 4800x1024 (原来是4096, 不改会段错误)

FB_BUFFER_LEN = 4800

离线

#11 2021-03-01 09:40:05 分享评论

armstrong
会员
注册时间: 2019-04-10
已发帖子: 168
积分: 166.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

达克罗德说的没错

离线

#12 2021-03-01 14:20:23 分享评论

SigmaStarStudy
会员
注册时间: 2021-02-15
已发帖子: 34
积分: 34

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

感谢楼主分享,把应用程序和文件系统一起打包 rootfs.ubifs:
rootfs.ubifs.lvgl_demo(20210301).7z

u-boot下用tftp烧录:

ubi part UBI;tftp 0x20000000 rootfs.ubifs;    ubi write 0x20000000 rootfs ${filesize};reset

离线

#13 2021-03-01 14:45:27 分享评论

SigmaStarStudy
会员
注册时间: 2021-02-15
已发帖子: 34
积分: 34

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

或者可以烧录这个rootfs.ubi文件: rootfs.ubifs.lvgl_demo(20210301).7z

烧录命令:

nand erase 0xf20000 0xA000000;tftp 0x20000000 rootfs.ubi;nand write 0x20000000 0xf20000 ${filesize};reset;

离线

#14 2021-03-02 12:47:48 分享评论

SigmaStarStudy
会员
注册时间: 2021-02-15
已发帖子: 34
积分: 34

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

一体打包烧录固件:
ssd202-7inch-1024x600-spinand-20210302.7z

u-boot 烧录指令:

setenv serverip 192.168.1.99;setenv ipaddr 192.168.1.33;nand erase 0x0 0x8000000;tftp 0x20000000 ssd202-7inch-1024x600-spinand-20210302.bin;nand write 0x20000000 0x0 ${filesize};

或官方烧录器烧录 (非常慢,不推荐!):
2021-03-02_124657.png

离线

#15 2021-03-02 13:31:48 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

感谢大佬分享,一步到位,

SigmaStarStudy 说:

一体打包烧录固件:
ssd202-7inch-1024x600-spinand-20210302.7z

u-boot 烧录指令:

setenv serverip 192.168.1.99;setenv ipaddr 192.168.1.33;nand erase 0x0 0x8000000;tftp 0x20000000 o/sysimage-nand.img;nand write 0x20000000 0x0 ${filesize};

官方烧录器烧录:
https://whycan.com/files/members/5985/2021-03-02_124657.png

离线

#16 2021-03-05 16:25:37 分享评论

caszhao
会员
注册时间: 2021-03-02
已发帖子: 11
积分: 11

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl

离线

#17 2021-03-06 08:43:45 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

大佬另开个帖子呀,顶上去

caszhao 说:

在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl

离线

#18 2021-03-06 11:46:49 分享评论

caszhao
会员
注册时间: 2021-03-02
已发帖子: 11
积分: 11

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

TeveT 说:

大佬另开个帖子呀,顶上去

caszhao 说:

在楼主的基础上增加rotation,开源了:
https://github.com/caszhao/ssd_lvgl

没事,需要的人才需要,不需要的也不会需要

离线

#19 2021-04-21 12:08:13 分享评论

981378640
会员
注册时间: 2021-04-21
已发帖子: 1
积分: 0.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

楼主啊,如何显示外部的jpg图片啊?有没有Demo参考一下啊

离线

#20 2021-04-21 14:54:37 分享评论

TeveT
会员
注册时间: 2019-07-01
已发帖子: 74
积分: 53

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

详细请看 JpegPlayer ,代码包有的

981378640 说:

楼主啊,如何显示外部的jpg图片啊?有没有Demo参考一下啊

离线

#21 2021-04-24 08:22:00 分享评论

海石生风
会员
注册时间: 2019-07-02
已发帖子: 3
积分: 2.5

Re: SSD20X直接编译lvgl7.10带双缓(附源码)

达克罗德 说:
TeveT 说:

嗯? 怎么理解呢,意思是,双缓冲下,在硬件disp控制器读帧过程中顿一下么, vsync机制是当前帧被使用的时候不会被填充么

达克罗德 说:

光双缓冲,没有vsync处理,应该还是有小概率产生撕裂吧

就怕切缓冲buff地址时候,如果发生在读帧过程中,一样会导致画面撕裂。感觉和硬件设计和驱动程序有关,也许某些SOC硬件可以保证直接切换地址不会导致问题。
不过我看许多SOC都还是明确要求在帧中断去切缓冲。
DRM的文档有关于这个双缓冲和VSync的说明:
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-vsync.c

If you run this example, you will notice that there is almost no flickering,
* anymore. The buffers are now swapped as a whole so each new frame shows
* always the whole new image. If you look carefully, you will notice that the
* modeset.c example showed many screen corruptions during redraw-cycles.
*
* However, this example is still not perfect. Imagine the display-controller is
* currently scanning out a new image and we call drmModeSetCrtc()
* simultaneously. It will then have the same effect as if we used a single
* buffer and we get some tearing. But, the chance that this happens is a lot
* less likely as with a single-buffer. This is because there is a long period
* between each frame called vertical-blank where the display-controller does
* not perform a scanout. If we swap the buffers in this period, we have the
* guarantee that there will be no tearing. See the modeset-vsync.c example if
* you want to know how you can guarantee that the swap takes place at a
* vertical-sync.

根据这个理解,即使硬件支持任意切缓冲不会导致画面撕裂,也还是会有问题。当绘图刷新率不稳定的时候,有可能会导致掉帧现象。你可以想象在一帧的时间里,如果不在v-blank时间来切缓冲,有可能刚好错过当前这一帧的数据。所以PC游戏里一般有个选项,锁定帧刷新到显卡vsync

那是只有硬件不支持双缓冲才出现的情况,现在的芯片只要支持LCD接口都会支持双缓冲。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn