硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2614|回复: 8
收起左侧

[emWin] 现在刷新有些卡顿,可以朝那些方面优化

[复制链接]

6

主题

50

回帖

68

积分

初级会员

积分
68
发表于 2020-4-24 18:00:59 | 显示全部楼层 |阅读模式
我现在用的设备硬件情况是8M 16位数据线的SDRAM,16色800*480液晶屏。软件方面emwin用了3缓冲,DMA2D加速,就是版主的模板。现在的情况是主界面会定时300秒刷新。会刷新一张背景图(SDRAM直接取),30多个小图标 30*30大小,另外还有几个大点的图标按键,TEXT控件大概有40个。这样的话点击触摸按键的时候切换比较慢,一个是感觉没点上另外一个就是界面切换的问题。目前触摸扫描函数和gui_exec在一个任务里面。这样的话想问一下我该朝那个方向优化一下。把触摸和gui_exec分开一下会不会好一些,至少触摸反应会快吧。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-4-24 20:32:08 | 显示全部楼层
1、仅显示40多个TEXT控件卡不卡。
2、添加上背景图,务必将此背景图绘制到存储设备里,不要使用其他方案,然后调用存储设备的API显示这个背景图,测试下效果。
3、然后同样的方法,将图标加上,看看还卡不卡
回复

使用道具 举报

6

主题

50

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2020-4-25 11:05:49 | 显示全部楼层
测试过程:
测试时间为手机定时器30秒左右,主界面没300ms刷新一次。在gui_exec后面使用变量累加计数。正常情况下不刷新这个累加计数和实际时间差不多。下面测试条件依次往上增加功能项目,百分数为累计值/实际时间,越小表示gui占时cpu时间越长。
定时刷新sprintf函数
76.4%
17.6%
只使用了不多几次,还有不少条件不符合的没调用,估计还要再加1.8倍
TXET控制显示
47.1%
29.3%
40+,字库是xbf方式从SDRAM里面取,4倍抗锢齿。这个控件挺耗时间
7个button菜单图片皮肤
30.6%
16.5%
15个小图标
15.5%
15.1%
GUI_MEMDEV_WriteAt显示存储设备图片
8.2%
7.3%
GUI_DrawBitmap直接显示SDRAM图片
9.2%
8.3%
最后两种感觉区别不大

感觉每个都增加了不少时间,现在看起来可以优化的是不使用sprintf函数,另外不使用txet控制直接在PaintDialog里面手动刷新。


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-4-25 11:36:05 | 显示全部楼层
zouw96 发表于 2020-4-25 11:05
测试过程:
测试时间为手机定时器30秒左右,主界面没300ms刷新一次。在gui_exec后面使用变量累加计数。正 ...

你这个表看着太费劲了。

其实你就列出执行时间就行了,简单直观。仅看懂了你的最后一句话。

1、sprintf耗时间的话,使用C标准库,不要使用微库。
2、text不怎么花时间。
回复

使用道具 举报

6

主题

50

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2020-4-25 12:17:07 | 显示全部楼层
确实不是因为sprintf,这个用时非常少,我再测试看看。
回复

使用道具 举报

6

主题

50

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2020-4-25 14:32:47 | 显示全部楼层
之前测试的数据都不对,那些都是不耗时间的。现在的问题是我屏幕上有一些需要旋转的小图标,就要300ms来WM_InvalidateWindow刷新一下全屏幕。之前单纯刷背景图片测试需要17ms。现在WM_InvalidateWindow一下大概要250ms(PaintDialog里面包含了刷背景图片和小图标的,如果PaintDialog函数为空的话也需要190ms)。现在看来就是因为更新了这个屏的区域造成的。有没有其他办法来实现这个功能。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-4-25 15:14:28 | 显示全部楼层
zouw96 发表于 2020-4-25 14:32
之前测试的数据都不对,那些都是不耗时间的。现在的问题是我屏幕上有一些需要旋转的小图标,就要300ms来WM_ ...

局部无效化。
回复

使用道具 举报

6

主题

50

回帖

68

积分

初级会员

积分
68
 楼主| 发表于 2020-4-25 15:43:18 | 显示全部楼层
现在这个小图标分布比较多还乱,局部无效化有点麻烦
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-4-27 08:17:53 | 显示全部楼层
zouw96 发表于 2020-4-25 15:43
现在这个小图标分布比较多还乱,局部无效化有点麻烦

嗯,再想点别的思路吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-18 22:27 , Processed in 1.855361 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表