在裸机下吧awtk移植了上去,在480 272分辨率下有100帧。
在800 480下43帧。如果使用复杂效果:比如高亮对话框、渐变、圆角。帧率急速下降,直至几帧。
同样的复杂效果在480 272下面能有20~30帧,算是可以接受的。
看datasheet有四个图层可以进行融合,无奈只有寄存器介绍,哪位大神用过这个硬件图层融合,咱们看看能不能移植到awtk里面去?
离线
是说bsp linux里面那个 /dev/fb0, /dev/fb1 ... 吗?
离线
是说bsp linux里面那个 /dev/fb0, /dev/fb1 ... 吗?
不是,是裸机和rtthread环境下面。
离线
F100S 软件计算性能损耗下降这么厉害啊
STM32系列有硬件图层加速,配合touchGFX,官方演示能从100%占用降低到5% ,但STM32带屏幕实在是超出了点能力,内存也的外扩,
真没有完美的方案
离线
awtk能不能在LINUX或者官方的MELIS下先移植测试?
裸机好像CACHE什么的需要注意,默认是没开影响很大
离线
这个图层是OSD一样的东西吧,又不是2D 加速器,对于加速UI 没啥用。 除非你要实现硬件OSD。
离线
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
贴上调试代码,不知有哪位大神有过优化经验。
离线
大神可以分享下代码么,最近在看硬件绘制鼠标闪烁问题,没什么思路了
离线
F100S 性能也就这样了
LZ可以看看有没有用DMA拷数据,软件拷数据,画面大了肯定耗时
我看STM32的没有开DMA2D这个硬件拷数据速度下降也很厉害
离线
我尝试降低lcd的像素时钟,然后将三缓冲换成单缓冲区,结果帧率提升很大。
最后我使用19M的像素时钟频率,然后使用双缓冲,帧率提升到了80帧左右。
这个结果很意外,我猜测是不是memcpy太慢?
像素时钟调低,明显有提升,不是lcd控制器自动从framebuffer取数据刷屏吗,和awtk计算有啥关系?难道是刷新太快,硬件刷新一帧,软件计算时间不够,然后就等下一帧的时间?
离线
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)
离线
一般LCD用16BIT 就可以了吧
这样数据应该是 800 * 480 * 2 这样
AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过
还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄
离线
我尝试降低lcd的像素时钟,然后将三缓冲换成单缓冲区,结果帧率提升很大。
最后我使用19M的像素时钟频率,然后使用双缓冲,帧率提升到了80帧左右。
这个结果很意外,我猜测是不是memcpy太慢?像素时钟调低,明显有提升,不是lcd控制器自动从framebuffer取数据刷屏吗,和awtk计算有啥关系?难道是刷新太快,硬件刷新一帧,软件计算时间不够,然后就等下一帧的时间?
framebuffer在ddr吧,刷新也是和CPU的计算抢带宽的
离线
一般LCD用16BIT 就可以了吧
这样数据应该是 800 * 480 * 2 这样
AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过
还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄
f1c100虽然是16位色,但是每个像素仍然占用4个字节
离线
一般LCD用16BIT 就可以了吧
这样数据应该是 800 * 480 * 2 这样
AWTK可以开脏矩形复制,每珍只更新局部的,具体我也没弄过
还有能贴个你的AWTK的工程文件上来吗? 我也想弄弄
不好意思,因为有些代码不能公开,我不发能上来,但是我后面可以写一个移植的过程,其实很简单。
最近编辑记录 vmalloc (2020-03-14 12:10:32)
离线
framebuffer在ddr吧,刷新也是和CPU的计算抢带宽的
对,framebuffer只能在ddr。
dma我试过了,速度更慢,不知道是不是我的驱动问题。
离线
确定了,用双缓冲性能比三缓冲好。
离线
f1c100虽然是16位色,但是每个像素仍然占用4个字节
f1c100可以565啊(一个像素两个字节,你必须要用32位色?),这样数据量减半,应该还有提升
最近编辑记录 tomyqg (2020-03-14 15:51:24)
离线
确定了,用双缓冲性能比三缓冲好。
你好,可不可以透露下怎么设置awtk的显示驱动的吗.
离线
主线上面有网友搞定了 drm, 应用层调用 libdrm 可以实现图层叠加。
离线