b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

WinCE6.0 修改开机Logo方法

电脑杂谈  发布时间:2020-01-19 21:02:00  来源:网络整理

wince主题软件_wince 导航软件哪个好_wince 导航软件

中秋假期已过,回来再次该博文主题。今天讲解第二种方法,将Logo图片的数据写入至Nand Flash中,在推进初始化LCD的之后,从固定的地址将数据读出并填充至显示缓存中。

实验平台:WinCE6.0+Android6410 +4.3寸CLD。

以下内容参考自CSDN论坛的一个帖子,不过上面的表述不是特别清楚,该主题博文进行了整理。为尊重原创,给出链接。

将Logo图片写Flash的模式再次细分,又可以分为几种不同的实现方式,今天先表述实现方式一,这是其中相当简洁的一种方法,不需要修改bib文件等配置性文件,只应该设置代码即可。

首先提几个问题:

1、在什么时候将Logo数据写入Nand Flash?

2、在什么时候读Nand Flash数据到显示缓存?

3、要写的Logo的数据是哪个?

4、写入Flash的哪些位置,又从哪个位置读数据?

5、写Flash的函数跟读Flash的函数怎样实现?

上面几个问题搞明白了,方法一基本就回来了。给出上面几个问题的解决办法:

1、答:为了提高后期变得便捷的更新开机启动Logo,在开启Eboot的主菜单中添加下载Logo的选项,如下图图示,选项G)便是通过USB下载Logo数据,同时将Logo数据写入至Nand F

lash的某一位置上。

2、答:在Eboot的初始化InitializeDisplay中,可以找到关于填充显示缓存的代码,改为从Flash的某一位置读取即可。

3、答:关于写Logo的数据,可以是bin格式的,也可以是原始的bmp格式。其实bin格式的内容也都是通过调用bmp文件的位图阵列而生成的。两者的差异就在于一个在Eboot里面实现写入bmp的位图阵列,一个是在独立的应用程序中读取的。

4、答:关于操作Nand Flash的位置问题,需要查看loader.h文件的相关代码,有关于Block的使用状况,如下所示。在这里为Logo数据分配一定的Block。

// NAND Boot (loads into SteppingStone) @ Block 0

#define NBOOT_BLOCK 0

#define NBOOT_BLOCK_SIZE1

#define NBOOT_SECTORBLOCK_TO_SECTOR(NBOOT_BLOCK)

// TOC @ Block 1

#define TOC_BLOCK 1

#define TOC_BLOCK_SIZE1

#define TOC_SECTORBLOCK_TO_SECTOR(TOC_BLOCK)

// Eboot @ Block 2

#define EBOOT_BLOCK 2

#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)

#define EBOOT_BLOCK_SIZESECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)

#define EBOOT_SECTORBLOCK_TO_SECTOR(EBOOT_BLOCK)

5、答:Flash的读写操作变量实现主要在nand.cpp文件中,具体实现可以参考函数ReadOSImageFromBootMedia和WriteOSImageToBootMedia。

下面给出详细的更改步骤:

1、首先设置loader.h文件,为Logo数据分配一定的Block空间。添加如下代码:

// Eboot @ Block 2

#define EBOOT_BLOCK 2

#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)

#define EBOOT_BLOCK_SIZESECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)

#define EBOOT_SECTORBLOCK_TO_SECTOR(EBOOT_BLOCK)

//-----------------------add by jazka 2011.09.04-------------------------

//-----------------------------start--------------------------------------

// Logo @ Block 6~

#define LOGO_BLOCK6

#define LOGO_BLOCK_SIZE20

#define LOGO_SECTORBLOCK_TO_SECTOR(LOGO_BLOCK)

//----------------------------- end ---------------------------------------

//-----------------------modify by jazka 2011.09.04-----------------------

wince 导航软件哪个好_wince 导航软件_wince主题软件

//-----------------------------start---------------------------------------

//#define RESERVED_BOOT_BLOCKS(NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE)

#define RESERVED_BOOT_BLOCKS(NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE + LOGO_BLOCK_SIZE)

从上面可以看出从Block6开始,为Logo分配了20个Block的Flash空间wince主题软件,这样可以存放64KB*20=1280KB大小的Logo数据,即1M以内的图片数据。由于Logo占用了一定的Block空间,所以中间Nk的起始位置RESERVED_BOOT_BLOCKS需要向后移动。

2、在Eboot启动主菜单中提高下载Logo数据的相应的选项。修改的代码如下:

EdbgOutputDebugString ( "F) Low-level format the Smart Media card\r\n");

//add by jazka 2011.09.05

//-----------------------------start---------------------------------

EdbgOutputDebugString ( "G) DOWNLOAD Logo now(USB)\r\n");

//----------------------------- end ---------------------------------

EdbgOutputDebugString ( "L) LAUNCH existing Boot Media image\r\n");

EdbgOutputDebugString ( "R) Read Configuration \r\n");

EdbgOutputDebugString ( "U) DOWNLOAD image now(USB)\r\n");

EdbgOutputDebugString ( "W) Write Configuration Right Now\r\n");

EdbgOutputDebugString ( "\r\nEnter your selection: ");

while (! ( ( (KeySelect >= '0') && (KeySelect <= '9') ) ||

( (KeySelect == 'A') || (KeySelect == 'a') ) ||

( (KeySelect == 'B') || (KeySelect == 'b') ) ||

( (KeySelect == 'C') || (KeySelect == 'c') ) ||

( (KeySelect == 'D') || (KeySelect == 'd') ) ||

( (KeySelect == 'E') || (KeySelect == 'e') ) ||

( (KeySelect == 'F') || (KeySelect == 'f') ) ||

( (KeySelect == 'G') || (KeySelect == 'g') ) || //add by jazak 2011.09.05

( (KeySelect == 'L') || (KeySelect == 'l') ) ||

( (KeySelect == 'R') || (KeySelect == 'r') ) ||

( (KeySelect == 'U') || (KeySelect == 'u') ) ||

( (KeySelect == 'W') || (KeySelect == 'w') ) ))

{

KeySelect = OEMReadDebugByte();

}

//add by jazka 2011.09.05

//--------------------------start-----------------------------

case 'G':

case 'g':

{

OALMSG(TRUE, (TEXT("Please send the Logo through USB.\r\n")));

g_bUSBDownload = TRUE;

{

DWORD dwStartAddr = 0;

LPBYTE lpDes = NULL;

lpDes = (LPBYTE)(FILE_CACHE_START);

if (!OEMReadData(LCD_WIDTH*LCD_HEIGHT*2, lpDes))

{

OALMSG(TRUE, (TEXT("Error when sending the Logo through USB.\r\n")));

SpinForever();

}

wince 导航软件_wince主题软件_wince 导航软件哪个好

dwStartAddr = (DWORD)lpDes;

if (!WriteLogoToBootMedia(dwStartAddr, (DWORD)(LCD_WIDTH*LCD_HEIGHT*2), dwStartAddr))

{

OALMSG(TRUE, (TEXT("Error when WriteLogoToBootMedia.\r\n")));

SpinForever();

}

}

}

break;

//-------------------------- end -----------------------------

这里把g_bUSBDownload设置为TRUE,以便后面选择USB进行下载。由于USB下载的速度跟写Flash速度不匹配,所以先下载到内存中,然后在一下子写入Flash中(这部分解析见博客)。WriteLogoToBootMedia便是Flash的写函数,后面给出实现。

3、修改LCD初始化函数InitializeDisplay,修改代码如下:

// Fill Framebuffer

#if(SMDK6410_LCD_MODULE == LCD_MODULE_UT_LCD35A)

memcpy((void *)EBOOT_FRAMEBUFFER_UA_START, (void *)InitialImage_rgb16_320x240, 320*240*2);

#elif(LCD_BPP == 16)

{

//delete by jazka 2011.08.31修改开机启动界面

/* int i;

unsigned short *pFB;

pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;

for (i=0; i<LCD_WIDTH*LCD_HEIGHT; i++)

{

//*pFB++ = 0x0000;//0x001F;// Blue


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-137481-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...