最近在搞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
|