当前位置: 代码迷 >> WinCE >> 100分:开帖讨论WINCE下24位色显示瓶颈,该怎么处理
  详细解决方案

100分:开帖讨论WINCE下24位色显示瓶颈,该怎么处理

热度:252   发布时间:2016-04-28 13:48:27.0
100分:开帖讨论WINCE下24位色显示瓶颈
最近在搞24BPP显示,搞不定,主要是切换图片会慢
有搞过的朋友,指点指点




24BPP图片显示慢的原因:读写内存的速度限制
16BPP 30-40ms之间
另外,输出24BPP图片好像有经过二次转化,16BPP就转化一次
即16BPP输出图片,只要一次写LCD Buffer
24BPP好像是将3字节排列的源文件图片,转化为4字节格式的保存在中转地址,然后从中转地址转化成最终显示图片,写入LCD buffer,而第二次的LCD buffer地址可能为unchche的,将其cache一下,和16BPP的显示速度就相当了


例如:
Volatile int x,y;
for(y=0;y<272;y++)
{
for(x=0;x<480;x++);
}

实测用时:14.3ms!!!其中,变量是放在堆栈中,对变量的处理时间:(STR*3+LDR*4)*272*480=14.30ms-1.94ms=12.36ms

反汇编如下:
.text:10001134 SUB SP, SP, #8
.text:10001138 MOV R2, #0
.text:1000113C STR R2, [SP,#8+var_4] //y值存堆栈[SP,#8+var_4]
.text:10001140 B loc_10001170
.text:10001140
========================循环开始========================
.text:10001144 ; ---------------------------------------
.text:10001144
.text:10001144 loc_10001144 ; CODE XREF: LCD_TST+44j
.text:10001144 STR R2, [SP,#8+var_8] //x值存堆栈[SP,#8+var_8]
.text:10001148 B loc_10001158
.text:10001148
.text:1000114C ; ---------------------------------------
.text:1000114C
.text:1000114C loc_1000114C ; CODE XREF: LCD_TST+2Cj
.text:1000114C LDR R3, [SP,#8+var_8] //从堆栈取出x
.text:10001150 ADD R3, R3, #1 //x++
.text:10001154 STR R3, [SP,#8+var_8] //x值存入堆栈
.text:10001154
.text:10001158
.text:10001158 loc_10001158 ; CODE XREF: LCD_TST+14j
.text:10001158 LDR R3, [SP,#8+var_8] //堆栈取出x
.text:1000115C CMP R3, #0x1E0 //x<480?
.text:10001160 BLT loc_1000114C //x<480则跳到114C处
.text:10001160
.text:10001164 LDR R3, [SP,#8+var_4] //取出y
.text:10001168 ADD R3, R3, #1 //y++
.text:1000116C STR R3, [SP,#8+var_4] //y存入堆栈
.text:1000116C
.text:10001170
.text:10001170 loc_10001170 ; CODE XREF: LCD_TST+Cj
.text:10001170 LDR R3, [SP,#8+var_4] //从堆栈取出y
.text:10001174 CMP R3, #0x110 //y<272?
.text:10001178 BLT loc_10001144 //y<272,则跳到1144处
.text:10001178
====================循环结束============================
.text:1000117C ADD SP, SP, #8
.text:10001180 BX LR




------解决方案--------------------
如果是内存的速度限制那只有提高内存的时钟频率了
------解决方案--------------------
你用的是ce自带的vga flat driver吗?
ce一般默认显示是16 bits的,你显示24位的,这样有一个颜色转换速度自然会慢很多
------解决方案--------------------
硬件支持加速不?
需要拉伸不?
------解决方案--------------------
探讨
使用GPE+飞凌5.0的BSP包
FLKC:HCLK:PCLK=1:4:8
硬件:S3C2440
我测试的是显示整屏的图片显示速度,不需拉伸

现在的问题主要有两个:
1、24BPP从源图像位置,需经两次转化,而16BPP就一次
2、24BPP第二次转化的目标地址,应该是uncache,而16BPP应该是cache的,有对比过

------解决方案--------------------
一个是16,一个是24,光看这个就是到24要比16慢了呀。而且还要看楼主为啥要显示24的图像,出于啥原因,目的何在。如果是项目需求的话试试把显卡驱动改成24P的
------解决方案--------------------
学习一下,定一个

------解决方案--------------------
这是个好问题,关注一下,学习了。
------解决方案--------------------
  相关解决方案