由于显示1副18Bit的640*480彩图,当开机后,不但要读取背景图片,还要将叠加层的OverlayA ,
OverlayB
大数组数据,赋予0xFF, 导致代码执行需要不少时间,这个时候TFT屏早就上电完毕显示出杂乱的东西。
代码有如此
for(i=0; i<180; i++)
memcpy(OverlayA + i*1200 +80, pFromPicture+ i*720, 720);
i*720 指令 算1周期
pFromPicture+ i*720 算1周期
OverlayA + i*1200 +80 1乘法2加法 算3周期
从外部SDRAM的数值拷贝 到OverlayA + i*1200 +80 算4周期
拷贝 720次 9*720 = 6480 周期
for循环180次
6480 *180 = 1166400
BF548 采用533MHZ 533000000个指令执行为1S 这里大约1S/500 = 2ms
我发现从NANDFLASH里 用非DMA方式读取数据 花掉的时间才造成了几S延迟。看来得优化去读的时刻,先读第1副显示界面,然后启动去显示后,再去读余下的画面 是正道!
解决: 我目前使用DMA方式去外部读取1 block的图片内容,按照手册和系统时钟,推算时间大约为250ms,可以读取1个640*480 24bit真彩色图片到外部SDRAM。 小技巧: 对于不是整数Page的图片,可以加大内存保存数组长度,来凑成整页处理哦。 比如2048 一个page size, 你的图片是200*180*3 个字节 那么。。。。
「该帖子被 lvben5d 在 2014-04-04 16:40:59 编辑过」