您尚未登录。

楼主 # 2022-04-18 22:48:51

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

在电脑上使用vs2019,移植到F1C100S上后,画面相当卡,惨不忍睹啊。

硬件:F1C100S + 25q256 + LCD  800X480 RGB565
软件:Linux 5.4  framebuffer 32bpp + LVGL8 + freetype

目前LVGL 位深是32  硬件连线是RGB565  暂时当成RGB888来用, 修改了设备树,format=r5g6b5,还是一样,不知道如何将framebuffer 修改为16bpp?单缓冲,双缓冲,全屏缓冲都试过了,目前感觉是LVGL绘图跟不上,图片,字体资源都放在外边,因为用fb-test-rect或者编译widgets_demo 帧率还可以。

请教坛里的大佬们,如何将framebuffer 修改为16bpp或者提高刷屏速度?

离线

楼主 #2 2022-04-30 19:20:03

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

Re: lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

rf 说:

你这估计是刷图方式有问题,开启了整屏刷图的模式,要选择局部刷。注意下刷新周期

是开启了整屏刷图,不过跟这个关系好像不大 ,目前发现DRAM_CLOCK 频率对刷图影响非常大,默认是312MHZ  我改到400MHZ 帧率提升非常明显,再高就不稳定了,CPU 720MHZ 对帧率影响不大,只是CPU使用下降了

FrameBuffer 还是使用32位的,为的是让LOGO持续到APP启动 
DRM可以改为16bpp还不知道如何让logo持续  drm从fb继承时好像会重新初始化

使用16bpp 内存小一半,传输数据也少一半,刷新速度应该更快吧

离线

楼主 #3 2022-05-01 15:34:00

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

Re: lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

发现软件做再多优化都没有把DRAM_CLOCK频率提高来的明显,CPU用默认频率,DRAM设置480MHZ 帧率提高3倍左右,已经很流畅了,用的全尺寸单缓冲区
软件上把freetype,去掉直接取模,一些图标也是取模,界面切换逻辑修改为先清空再重新绘制,之前是把界面全部绘制出来隐藏起来,切换时再显示出指定的界面,对性能低的MCU不合适,内存占用也大,最后就是加上多线程。接下来就是优化启动时间,缩小镜像体积了

离线

楼主 #5 2022-05-01 22:12:27

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

Re: lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

novice 说:

建议你检查消息循环,空闲回调那些地方。这个卡顿跟性能没关系,我用蜗牛唐的192MHZ arm9带7寸屏幕都跑得比你这快,更别说你这U的主频那么高了。

我使用的是800×480 32bit全屏缓冲区,有绘制背景图片,总感觉lvgl绘图速度上不去,LVGL要绘制完才更新,
主线程就是这样,你说的消息循环,空闲回调,这些是LVGL自动处理的吧
while (1)
    {
        signal(SIGINT, sighandle); //设置信号处理函数
        usleep(lv_task_handler() * 1000);
    }

离线

楼主 #7 2022-05-02 12:18:14

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

Re: lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

bigbat 说:

你的好在颜色是正常的,我的颜色都不正常

是不是位深没设置对?

离线

楼主 #8 2022-05-02 13:15:08

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 311
积分: 354

Re: lvgl从模拟器移植到F1C100S上,卡到怀疑人生?

编译InfoNes 跑了一下  https://github.com/nejidev/arm-NES-linux  声音听着难受
颜色问题 一开始以为是RGB5565 转换后还是颜色不对, 原来InfoNes默认输出的是RGB555 格式的

static DWORD rgb555_2_argb888(WORD color)
{
    DWORD c;
    unsigned char red;
    unsigned char green;
    unsigned char blue;

    red = ((unsigned char)(color >> 10)) << 3;
    green = ((unsigned char)(color >> 5)) << 3;
    blue = ((unsigned char)color) << 3;

    c = (red | c) << 16 | (green | c) << 8 | (blue | c);

    return c;
}

离线

页脚

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

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