S3C2416 WINCE6.0开机logo制作

关于开机wince6.0下开机logo实现一般有两种方法:

方法一是将图片转换成数组,编译进eboot中,但是这种会导致最终生成的eboot.bin太大,超过529k,不能使用,但是可以加入一种压缩手段,将高分辨的图片等比缩放,然后在填充LCD缓冲区时,在等比放大即可,但是缩放后的图片会不是很清晰,而且后期的Logo更新也变的很麻烦。

方法二是将bmp的图片转换为bin文件,烧写到Nandflash的某个固定地址,eboot运行时读取该地址的内容,放到LCD的显存里。

由于第一种方式实现起来比较简单,这里就就基于友坚的2416开发板针对第一种方法介绍一下。

在Eboot中需要对LCD进行初始化工作即在函数Bootloader\Eboot.Whimory的main.c中由InitDisplay函数来实现,开机Logo的设置就在这个函数里面。首先需要保证LCD的初始化正确,最好可以在eboot线刷出一种颜色了,友坚的开发板是先刷新成了蓝色,这一步就可以省略,然而我用的群创的AT070TN83屏,在刷一种颜色时没有问题,但是刷图片时,就会出现很剧烈的抖动。最后检测是在初始化时,LCD的频率没有设置正确,即clkval不正确。

然后找一个下载工具,推荐一个http://download.csdn.net/detail/ANTHONE_LIGANG/3650479 ,下载下来,解压,打开\bmp2c\bin\Debug,然后双击bmp2c.exe ,选择需要转换的图片,已经C文件的保存路径,最后记得输入图片的高度和宽度。

打开转换后的文件logo.c,将数组的内容拷贝到DisplaySample_320_240.h中的prayer16bpp[]数组中。保存退出。

然后在打开main.c,找到

s2416INTR->INTSUBMSK |= (0xf << IRQ_SUB_LCD1);    // MASK all LCD Sub Interrupt

if(  LCD_MODULE_TYPE ==       LCD_MODULE_UT35A){
         memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, prayer16bpp, LCD_ARRAY_SIZE_TFT_16BIT);
}
else //if(LCD_MODULE_TYPE == LCD_MODULE_UT43A)
 {
  
        pFB = (unsigned short *)IMAGE_FRAMEBUFFER_UA_BASE;

        for (i=0; i<LCD_WIDTH*LCD_HEIGHT; i++)
            *pFB++ = 0x001F;//0x001F        // 开机显示为蓝色
            //*pFB++ = 0x5F00;

 }

将上面红色代码改为

   PWORD pWord = (PWORD)prayer16bpp;
   PWORD pFB = (PWORD)IMAGE_FRAMEBUFFER_UA_BASE;
  for (i=0; i<400*240; i++)
  {
   pFB[4*i - 2 * (i % 400)]= pWord[i];
   pFB[4*i - 2 * (i % 400)+1] = pWord[i];
   pFB[4*i - 2 * (i % 400)+400*2] = pWord[i];
   pFB[4*i - 2 * (i % 400)+1+400*2] = pWord[i];
  }注意是,图片等比例缩放2倍,如果缩放倍数太大,for循环中的内容需要改变。

最后编译,下载eboot.bin到开发板中,开机即可看到logo。修改驱动时,可以不用全部重新编译BSP包,只需单独编译Bootloader即可,在左边的Solution Explorer中找到Bootloader目录,点击右键,选择rebuild.然后在选择build菜单栏下的make run-time imag编译生成即可。

看到网上很多都说在使用这种方法时会出现花屏,除了上面两点没有保证外,还有一个可能的原因是最容易被忽视的:

不同的工具转换后的数组形式不一样,可能是char数组,可能是unsigned short数组,也可能是unsigned int数组,当将这些数据填充到显示缓存的时候,有一个高地位的问题。比如如下代码:
unsigned short* pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;
*pFB = 0x001F;这种情况下,存储到显示缓存中的第一个字节其实是0x1F,而并不是0x00,不管是采用for循环填充还是用memcpy填充,都存在一个图片数据与显示缓存的匹配问题,如果不匹配,就会发生大家所说的花屏现象。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值