100分:开帖讨论WINCE上24位色显示瓶颈

100分:开帖讨论WINCE下24位色显示瓶颈
本帖最后由 zhuEvan 于 2010-10-26 11:29:29 编辑
最近在搞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处