WhyCan Forum(哇酷开发者社区)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2020-03-07 13:44:04

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

有人知道100s的图层融合怎么用吗

在裸机下吧awtk移植了上去,在480 272分辨率下有100帧。
在800 480下43帧。如果使用复杂效果:比如高亮对话框、渐变、圆角。帧率急速下降,直至几帧。

同样的复杂效果在480 272下面能有20~30帧,算是可以接受的。
看datasheet有四个图层可以进行融合,无奈只有寄存器介绍,哪位大神用过这个硬件图层融合,咱们看看能不能移植到awtk里面去?

离线

#2 2020-03-07 13:55:09

smartcar
会员
注册时间: 2018-02-19
累计积分: 579

Re: 有人知道100s的图层融合怎么用吗

是说bsp linux里面那个 /dev/fb0, /dev/fb1 ... 吗?

离线

#3 2020-03-07 13:55:55

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

smartcar 说:

是说bsp linux里面那个 /dev/fb0, /dev/fb1 ... 吗?

不是,是裸机和rtthread环境下面。

离线

#4 2020-03-07 16:32:25

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 75

Re: 有人知道100s的图层融合怎么用吗

F100S 软件计算性能损耗下降这么厉害啊

STM32系列有硬件图层加速,配合touchGFX,官方演示能从100%占用降低到5%  ,但STM32带屏幕实在是超出了点能力,内存也的外扩,

真没有完美的方案

离线

#5 2020-03-07 16:33:53

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 75

Re: 有人知道100s的图层融合怎么用吗

awtk能不能在LINUX或者官方的MELIS下先移植测试?   

裸机好像CACHE什么的需要注意,默认是没开影响很大

离线

#6 2020-03-08 12:49:52

kakatoo
会员
注册时间: 2018-10-08
累计积分: 42

Re: 有人知道100s的图层融合怎么用吗

这个图层是OSD一样的东西吧,又不是2D 加速器,对于加速UI 没啥用。 除非你要实现硬件OSD。

离线

#7 2020-03-10 10:28:38

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

jiangchun9981 说:

awtk能不能在LINUX或者官方的MELIS下先移植测试?   

裸机好像CACHE什么的需要注意,默认是没开影响很大


家里没环境,linux已经弄好了,过几天就把awtk弄到linux上看看。

我记得awtk官方文档里面不建议缩放、旋转,我尽量避免这些。谁知道我在awtk的IDE里面,有张图片设置了缩放比例....然后导致一个界面只有十几帧。
而后去掉缩放,直接把图片编辑到合适大小放上去,立马60阵。

另外一些渐变、动画,的不流畅,应该就是芯片性能问题,我开启窗口水平切换动画,每帧就是28 - 30ms了,远没有480 272的流畅
[DEBUG]:#####################################
[DEBUG]:awtk\src\base\lcd_profile.c:326
[DEBUG]:-------------------------------------
[DEBUG]:  total_cost=28
[DEBUG]:  draw_image_cost=19 times=2
[DEBUG]:  draw_text_cost=0 times=0
[DEBUG]:  fill_cost=0 times=0
[DEBUG]:  stroke_cost=0 times=0
[DEBUG]:  end_frame_cost=9

贴上调试代码,不知有哪位大神有过优化经验。

离线

#8 2020-03-10 11:58:56

shaoxi2010
会员
注册时间: 2019-06-13
累计积分: 80

Re: 有人知道100s的图层融合怎么用吗

大神可以分享下代码么,最近在看硬件绘制鼠标闪烁问题,没什么思路了

离线

#9 2020-03-10 16:58:28

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 75

Re: 有人知道100s的图层融合怎么用吗

F100S 性能也就这样了

LZ可以看看有没有用DMA拷数据,软件拷数据,画面大了肯定耗时 

我看STM32的没有开DMA2D这个硬件拷数据速度下降也很厉害

离线

#10 2020-03-14 09:57:44

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

我尝试降低lcd的像素时钟,然后将三缓冲换成单缓冲区,结果帧率提升很大。
最后我使用19M的像素时钟频率,然后使用双缓冲,帧率提升到了80帧左右。
这个结果很意外,我猜测是不是memcpy太慢?

像素时钟调低,明显有提升,不是lcd控制器自动从framebuffer取数据刷屏吗,和awtk计算有啥关系?难道是刷新太快,硬件刷新一帧,软件计算时间不够,然后就等下一帧的时间?

离线

#11 2020-03-14 10:09:16

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

jiangchun9981 说:

F100S 性能也就这样了

LZ可以看看有没有用DMA拷数据,软件拷数据,画面大了肯定耗时 

我看STM32的没有开DMA2D这个硬件拷数据速度下降也很厉害

用awtk的memcpy测试,速度是89M/S。
一帧的数据 800 * 480 * 4 = 1.46M
如果每秒要求80帧:1.46 * 80 = 116.8M/S

这样看上去是不够的,这还仅仅是memcpy,如果加上其他计算肯定是不够了。

但是我看awtk显示出来的是75fps,那么数据量:75 * 1.46 = 109.5M/s  是超过这个memcpy的。
看看memcpy测试代码

start = time_now_ms();
  for (i = 0; i < nr; i++) {
    uint32_t half = length >> 1;
    memcpy(buffer, (char*)buffer + half, half);
    memcpy((char*)buffer + half, buffer, half);
  }
  cost = time_now_ms() - start;
  total_cost += cost;

这里好像复制了两次,那一次的话应该就是180M左右了。

然后我想试试dma会不会快点,然而测试结果居然是55M/S,应该是驱动有问题。

最近编辑记录 vmalloc (2020-03-14 10:31:53)

离线

#12 2020-03-14 11:40:33

jiangchun9981
会员
注册时间: 2019-07-31
累计积分: 75

Re: 有人知道100s的图层融合怎么用吗

一般LCD用16BIT 就可以了吧 

这样数据应该是 800 * 480 * 2 这样

AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过

还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄

离线

#13 2020-03-14 11:57:56

达克罗德
会员
注册时间: 2018-04-10
累计积分: 804

Re: 有人知道100s的图层融合怎么用吗

vmalloc 说:

我尝试降低lcd的像素时钟,然后将三缓冲换成单缓冲区,结果帧率提升很大。
最后我使用19M的像素时钟频率,然后使用双缓冲,帧率提升到了80帧左右。
这个结果很意外,我猜测是不是memcpy太慢?

像素时钟调低,明显有提升,不是lcd控制器自动从framebuffer取数据刷屏吗,和awtk计算有啥关系?难道是刷新太快,硬件刷新一帧,软件计算时间不够,然后就等下一帧的时间?

framebuffer在ddr吧,刷新也是和CPU的计算抢带宽的

离线

#14 2020-03-14 12:07:53

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

jiangchun9981 说:

一般LCD用16BIT 就可以了吧 

这样数据应该是 800 * 480 * 2 这样

AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过

还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄


f1c100虽然是16位色,但是每个像素仍然占用4个字节

离线

#15 2020-03-14 12:08:58

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

jiangchun9981 说:

一般LCD用16BIT 就可以了吧 

这样数据应该是 800 * 480 * 2 这样

AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过

还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄

不好意思,因为有些代码不能公开,我不发能上来,但是我后面可以写一个移植的过程,其实很简单。

最近编辑记录 vmalloc (2020-03-14 12:10:32)

离线

#16 2020-03-14 12:09:59

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

达克罗德 说:

framebuffer在ddr吧,刷新也是和CPU的计算抢带宽的

对,framebuffer只能在ddr。
dma我试过了,速度更慢,不知道是不是我的驱动问题。

离线

#17 2020-03-14 12:56:03

vmalloc
会员
注册时间: 2019-10-28
累计积分: 18

Re: 有人知道100s的图层融合怎么用吗

确定了,用双缓冲性能比三缓冲好。

离线

#18 2020-03-14 15:46:03

tomyqg
会员
注册时间: 2019-12-06
累计积分: 3

Re: 有人知道100s的图层融合怎么用吗

vmalloc 说:

f1c100虽然是16位色,但是每个像素仍然占用4个字节

f1c100可以565啊(一个像素两个字节,你必须要用32位色?),这样数据量减半,应该还有提升

最近编辑记录 tomyqg (2020-03-14 15:51:24)

离线

页脚