亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cfload.c

?? 這個(gè)是嵌入式arm系列的一個(gè)bootloader程序。對(duì)需要編寫(xiě)bootloader的很有參考價(jià)值
?? C
字號(hào):

/*



Module Name:

    CFLoad.c

Abstract:
	Implements the Compact Flash Card Load routine.
	

*/

#include <windows.h>
#include <halether.h>

#include "CFDisk.h"
#include "CFLoad.h"
#include "msdos.h"

#define OUTPUT_CFLOAD_MSGS		0
#define OUTPUT_CFLOAD_VERBOSE_MSGS	0
#define OUTPUT_CFLOAD_VERBOSE_DATA_MSGS	0

// name of file we'll load from the external media (in 8.3 DOS format)
#define CFCardFileNameBase	 "NK "
#define CFCardFileNameExt	 "BIN"

#define BIN_FILE_TYPE 1
#define NB0_FILE_TYPE 2
#define BOOTLOADER		4
#define NKBIN			8
#define FLASHTARGET		16

extern DWORD dwLaunchAddr;
extern DWORD fWriteToFlash;
extern DWORD dwPhysStart;	// image physical starting address
extern DWORD dwPhysLen;	// image physical length
extern DWORD fileType;
extern DWORD dwEBOOT_OFFSET;

static ULONG  BlockChecksum(ULONG BlockStart, ULONG BlockLength);

BYTE	BinSig[7];		// Binary header signature
BYTE	BinStart[4];		// Binary header start
BYTE	BinLength[4];		// Binary header length

/*****************************************************************************
 * 
 *	Procedure: LoadFromCF
 *
 *	Description: Loads a binary (BIN) file from the CF Memory card.
 *
 *	Inputs: None.
 *
 *	Outputs: BOOL.
 *
 *	Notes:
 *			
 *
 *
 *       
 ******************************************************************************/

BOOL CFLoadFile(void)
{
	ULONG	bytesRead;

	if (!CFDisk_Open(CFCardFileNameBase, CFCardFileNameExt))
	{
		EdbgOutputDebugString("File Not Found\r\n");
		return FALSE;
	}

    // Display welcome message
   	EdbgOutputDebugString("Update Start..\r\n");

// Recognize the image type
	CFDisk_Read(BinSig, 7, &bytesRead);
#if (OUTPUT_CFLOAD_MSGS == 1)
	EdbgOutputDebugString("bytesRead = 0x%x\r\n", bytesRead);
#if (OUTPUT_CFLOAD_VERBOSE_MSGS == 1)
	BootGetMemory(((ULONG) BinSig), 7, sizeof(BYTE));
#endif
#endif
	
	if (!(compare(BinSig, "B000FF\x0A",7)))
	{
		EdbgOutputDebugString("Error Kernel Image File.\r\n");	
		return FALSE;
	}
// Recognize the image type

// Read Image start address
	CFDisk_Read(BinStart, 4, &bytesRead);
#if (OUTPUT_CFLOAD_MSGS == 1)
	EdbgOutputDebugString("bytesRead = 0x%x\r\n", bytesRead);
#if (OUTPUT_CFLOAD_VERBOSE_MSGS == 1)
	BootGetMemory(((ULONG) BinStart), 4, sizeof(BYTE));
#endif
#endif

	dwPhysStart = bytesToNum(BinStart, 4);
// Read Image start address
	
// Read Image Length
	CFDisk_Read(BinLength, 4, &bytesRead);
#if (OUTPUT_CFLOAD_MSGS == 1)
	EdbgOutputDebugString("bytesRead = 0x%x\r\n", bytesRead);
#if (OUTPUT_CFLOAD_VERBOSE_MSGS == 1)
	BootGetMemory(((ULONG) BinLength), 4, sizeof(BYTE));
#endif
#endif

	dwPhysLen = bytesToNum(BinLength, 4);
// Read Image Length

	EdbgOutputDebugString("\r\nImage start 0x%X length 0x%X\r\n", dwPhysStart, dwPhysLen );

//	
// Start Download Image
//
{
	
	static DWORD dwRecordAddr;	// starting address of the record
	ULONG	RecStartAddr;
	ULONG	RecLength;
	ULONG	RecChecksum;
	BYTE    RecordInfo[12];
	ULONG 	TotalLength = 0;
	ULONG   RecCount = 0;

	EdbgOutputDebugString("Download RAM Image\r\n");

	// Start to download RAM Image or update flash image.
	if ((dwPhysStart & 0x90000000) == 0x90000000)
	{
		EdbgOutputDebugString("\r\nDownloading NK.BIN for flash target.\r\n");
#if defined ( ORGEBOOT_FLAG )		
		dwPhysStart -= 0x182f3000; // (0x98380000 - 0x8008D000) offset from flash address to SDRAM address
#else
		dwPhysStart -= 0x182c0000; // (0x98380000 - 0x800C0000) offset from flash address to SDRAM address
#endif
		fWriteToFlash = 1;
	}
	
	dwPhysStart |= 0x20000000;
	
	while(1)
	{	
		CFDisk_Read(RecordInfo, 12, &bytesRead);
	  	RecStartAddr = *((ULONG *) RecordInfo);
	  	RecLength = *(((ULONG *) RecordInfo) + 1);
	  	RecChecksum = *(((ULONG *) RecordInfo) + 2);

#if (OUTPUT_CFLOAD_VERBOSE_MSGS == 1)
	  	EdbgOutputDebugString("BodyStartAddr = 0x%x = %d\r\n", RecStartAddr, RecStartAddr);
	  	EdbgOutputDebugString("BodyOffset = 0x%x = %d\r\n", RecLength, RecLength);
	  	EdbgOutputDebugString("BodyChecksum = 0x%x = %d\r\n", RecChecksum, RecChecksum);
#endif

	  	if((RecStartAddr == 0) && (RecChecksum == 0))
	  	{
	  		dwLaunchAddr = (DWORD)RecLength;	// Launch Address
	  		EdbgOutputDebugString("Launch Address = 0x%x\r\n", dwLaunchAddr );
	  		EdbgOutputDebugString("Image Length = 0x%x : Record Counts = 0x%x\r\n", TotalLength,RecCount );
			break;
		}

	  	TotalLength += RecLength;
	  	RecCount++;

	  	if(fWriteToFlash)
	  	{	
#if defined ( ORGEBOOT_FLAG )		
		RecStartAddr -= 0x182f3000; // (0x98380000 - 0x8008D000) offset from flash address to SDRAM address
#else
		RecStartAddr -= 0x182c0000; // (0x98380000 - 0x800C0000) offset from flash address to SDRAM address
#endif
	  	}
	  
	  	RecStartAddr |= 0x20000000;
	  
	  	EdbgOutputDebugString("Record Start = %x , Length = %x\r\n", RecStartAddr , RecLength);
	  	
	  	CFDisk_Read(((PBYTE) RecStartAddr), RecLength, &bytesRead);

#if (OUTPUT_CFLOAD_VERBOSE_MSGS == 1)
	  	BootGetMemory((RecStartAddr), RecLength, sizeof(BYTE));
#endif

	  	if((BlockChecksum(RecStartAddr, RecLength)) != RecChecksum) 
	  	{
			EdbgOutputDebugString("Checksum error\r\n");
			return FALSE;
      	}
   	}
}
//	
// While loop
//
	fileType |= BIN_FILE_TYPE;
	if(fWriteToFlash)
	{
		dwEBOOT_OFFSET = 0x00080000;
		fileType |= FLASHTARGET ;			// File Type
	}
	
	return TRUE;
}

static ULONG
BlockChecksum(ULONG BlockStart, ULONG BlockLength)
{
	ULONG index;
	ULONG theChecksum =0;
	PBYTE pChecksum;

	// Accumulate the Checksum Value
	pChecksum = (PBYTE) BlockStart;
	for (index = 0; index < BlockLength; index++)
	{
		theChecksum += *pChecksum++;
	}
	return theChecksum;
}

//#if (OUTPUT_CFLOAD_VERBOSE_MSG | DBG_READFILE_MSG)
/*****************************************************************************
 * 
 *	Procedure: BootGetMemory
 *
 *	Description: Bootloader Display Memory
 *
 *	Inputs: XXX.
 *
 *	Outputs: BOOL Result - TRUE if passed, FALSE if error.
 *
 *	Notes:
 *
 *	PDL:
 *
 *
 *		Return True.
 *       
 ******************************************************************************/
CHAR
IsPrintable(BYTE dataByte)
{
	return (dataByte < 0x20 || dataByte > 0x7F) ? '.' : (CHAR)dataByte;
}


BOOL
BootGetMemory(ULONG startAddr, ULONG length, BYTE dataSize)
{
	BOOL status = TRUE;
	ULONG dataAddr;
	ULONG index;
	ULONG dataLength;
	CHAR dataString[0x100];
	PCHAR stringPtr;
	
//	EdbgOutputDebugString("BootGetMemory!\r\n");

	dataAddr = startAddr & ~0x0F;
	dataLength = length + startAddr - dataAddr;

	stringPtr = &dataString[0];
	
	//EdbgOutputDebugString("Start Address = 0x%X, length = 0x%x size = %d:\r\n\r\n", startAddr, length, dataSize );

	for (index = 0; index < dataLength; index++)
	{
		if (!(dataAddr & 0x0F))
		{
			EdbgOutputDebugString("0x%X:", dataAddr);
		}
		
		
		switch (dataSize)
		{
			case sizeof(BYTE):
				if (dataAddr < startAddr)
				{
					EdbgOutputDebugString("   ");
					*stringPtr++ = ' ';
				}
				else
				{
					EdbgOutputDebugString(" %B", *((PBYTE) dataAddr));
					*stringPtr++ = IsPrintable(*((PBYTE) dataAddr));
				}
				break;
			case sizeof(WORD):
				if (dataAddr < startAddr)
				{
					EdbgOutputDebugString("     ");
					*stringPtr++ = ' ';
					*stringPtr++ = ' ';
				}
				else
				{
					EdbgOutputDebugString(" %H", *((PWORD) dataAddr));
					*stringPtr++ = IsPrintable(*((PBYTE) dataAddr));
					*stringPtr++ = IsPrintable(*((PBYTE) (dataAddr + 1)));
				}
				break;
			case sizeof(DWORD):
				if (dataAddr < startAddr)
				{
					EdbgOutputDebugString("         ");
					*stringPtr++ = ' ';
					*stringPtr++ = ' ';
					*stringPtr++ = ' ';
					*stringPtr++ = ' ';
				}
				else
				{
					EdbgOutputDebugString(" %X", *((PDWORD) dataAddr));
					*stringPtr++ = IsPrintable(*((PBYTE) dataAddr));
					*stringPtr++ = IsPrintable(*((PBYTE) (dataAddr + 1)));
					*stringPtr++ = IsPrintable(*((PBYTE) (dataAddr + 2)));
					*stringPtr++ = IsPrintable(*((PBYTE) (dataAddr + 3)));
				}
				break;
			default:
				break;
		}

		dataAddr += dataSize;

		if (!(dataAddr & 0x0F))
		{
			*stringPtr = (CHAR)NULL;
			EdbgOutputDebugString(" %s\r\n", dataString);
			stringPtr = &dataString[0];
			
	
		}

	}

	if ((dataAddr & 0x0F))
	{
		*stringPtr = (CHAR)NULL;
		EdbgOutputDebugString(" %s\r\n", dataString);
	}

	return status;
}

BOOL
BootSetMemory(ULONG startAddr, ULONG dataValue, ULONG length, BYTE dataSize)
{
	BOOL status = TRUE;
	ULONG dataAddr = startAddr;
	ULONG index;

	//EdbgOutputDebugString("BootSetMemory!\r\n");
	//EdbgOutputDebugString("Start Address = 0x%X, Value = 0x%x, length = 0x%x, size = %d:\r\n\r\n", startAddr, dataValue, length, dataSize );
	for (index = 0; index < length; index++)
	{
		switch (dataSize)
		{
			case sizeof(BYTE):
				*((PBYTE) dataAddr) = (BYTE) dataValue;
				break;

			case sizeof(WORD):
				*((PWORD) dataAddr) = (WORD) dataValue;
				break;

			case sizeof(DWORD):
				*((PDWORD) dataAddr) = (DWORD) dataValue;
				break;

			default:
				break;
		}

		dataAddr += dataSize;
	}

	return status;
}

//#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久日一线二线三线suv| 国产精品久久久久9999吃药| 欧美在线免费观看视频| 99re这里只有精品6| 大桥未久av一区二区三区中文| 久久精品国产在热久久| 丝袜a∨在线一区二区三区不卡| 国产酒店精品激情| 美女视频一区在线观看| 蜜臀久久99精品久久久久久9| 亚洲成人精品在线观看| 亚洲成人三级小说| 日本中文字幕不卡| 奇米精品一区二区三区在线观看一| 日韩国产欧美三级| 久久99在线观看| 国产美女视频一区| 国产成人精品免费| 99精品久久免费看蜜臀剧情介绍| 91美女福利视频| 欧美亚洲动漫精品| 欧美丰满美乳xxx高潮www| 欧美一级夜夜爽| 亚洲精品在线观看视频| 国产精品视频第一区| 亚洲欧美电影一区二区| 亚洲aⅴ怡春院| 久久99精品国产麻豆婷婷| 国产精品一级在线| heyzo一本久久综合| 欧美自拍偷拍午夜视频| 日韩欧美中文字幕一区| 国产欧美一区二区三区沐欲 | 中文字幕一区二| 亚洲一区二区在线免费观看视频| 午夜影院久久久| 狠狠色狠狠色综合日日91app| 懂色av一区二区三区蜜臀| 日本黄色一区二区| 日韩欧美国产系列| 国产精品久久久一区麻豆最新章节| 亚洲一区在线观看视频| 麻豆91在线观看| 99视频精品全部免费在线| 欧美性大战久久久久久久蜜臀| 一区二区三区国产豹纹内裤在线 | 国产精品综合二区| 91久久香蕉国产日韩欧美9色| 3d动漫精品啪啪| 国产精品国产三级国产a| 日韩成人免费在线| 成人免费视频网站在线观看| 欧美日韩黄视频| 国产三级一区二区| 视频一区二区欧美| 成人高清视频在线| 日韩一区二区三区视频在线 | 日韩电影在线观看一区| 成年人网站91| 日韩欧美成人午夜| 亚洲综合色丁香婷婷六月图片| 全部av―极品视觉盛宴亚洲| 成人免费毛片高清视频| 欧美精品v国产精品v日韩精品| 国产偷v国产偷v亚洲高清| 亚洲成a人片在线不卡一二三区| 国产成人自拍高清视频在线免费播放| 欧洲国内综合视频| 中文字幕第一页久久| 人人狠狠综合久久亚洲| 在线观看区一区二| 欧美国产一区视频在线观看| 毛片基地黄久久久久久天堂| 一本到不卡免费一区二区| 久久久午夜电影| 奇米一区二区三区av| 欧美色偷偷大香| 亚洲欧美日韩人成在线播放| 国产成人8x视频一区二区| 欧美刺激午夜性久久久久久久| 亚洲一区二区三区在线看| 91丝袜国产在线播放| 国产精品素人一区二区| 国产精品一区二区久久不卡| 欧美一区二区日韩| 天天亚洲美女在线视频| 色综合久久综合网97色综合| 久久精品欧美一区二区三区不卡| 日本一区中文字幕 | 中文字幕精品一区二区三区精品| 免费成人av资源网| 欧美精品一二三| 亚洲一区影音先锋| 色吧成人激情小说| 樱桃视频在线观看一区| 日本高清视频一区二区| 日韩伦理av电影| 91麻豆福利精品推荐| 国产精品电影院| 91蜜桃网址入口| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美体内she精高潮| 亚洲乱码一区二区三区在线观看| 成人性视频免费网站| 亚洲国产成人午夜在线一区 | 欧美亚洲高清一区| 一级中文字幕一区二区| 在线看不卡av| 亚洲成人自拍偷拍| 在线播放欧美女士性生活| 丝袜国产日韩另类美女| 日韩一区二区三区在线| 老鸭窝一区二区久久精品| 欧美成人一区二区三区片免费 | 一区二区在线看| 欧美色精品天天在线观看视频| 亚洲国产成人va在线观看天堂| 欧美另类z0zxhd电影| 日韩精品每日更新| 欧美videofree性高清杂交| 国产一区二区三区在线观看免费视频 | 成人精品gif动图一区| 中文字幕在线观看一区| 欧日韩精品视频| 日韩av电影免费观看高清完整版在线观看| 91精品久久久久久蜜臀| 亚洲精品你懂的| 99久久久精品| 一区二区久久久| 在线综合视频播放| 国内成人精品2018免费看| 中文成人av在线| 在线观看日韩毛片| 久久精品国产99| 国产精品久久一卡二卡| 欧洲av一区二区嗯嗯嗯啊| 免费高清在线一区| 国产精品国产自产拍在线| 欧美视频一区二区在线观看| 视频一区中文字幕国产| 久久一日本道色综合| 91影院在线观看| 日本午夜精品视频在线观看| www激情久久| 日本高清不卡视频| 欧美aⅴ一区二区三区视频| 国产欧美一区二区精品久导航| 91影院在线观看| 韩国欧美国产一区| 亚洲欧洲精品天堂一级| 欧美区一区二区三区| 国产精品一卡二卡在线观看| 亚洲一区二区精品久久av| 久久综合九色综合97婷婷| 91免费版在线看| 国产一区二区91| 亚洲bt欧美bt精品| 国产精品美女www爽爽爽| 欧美一区午夜视频在线观看| 成人动漫一区二区| 蜜桃av噜噜一区二区三区小说| 亚洲欧洲一区二区在线播放| 91精品国产美女浴室洗澡无遮挡| 99国产精品久久久久久久久久 | 91亚洲精品久久久蜜桃网站| 美女视频黄频大全不卡视频在线播放| 国产精品蜜臀在线观看| 日韩精品一区二区三区老鸭窝 | 中文字幕一区二区视频| 日韩一区二区三区电影| 色屁屁一区二区| 国产一区二区三区免费播放| 一区二区三区影院| 国产精品午夜在线观看| 精品国产一区二区三区四区四| 在线视频欧美精品| 成人18精品视频| 国产一区二区h| 蜜桃视频在线观看一区| 亚洲国产欧美日韩另类综合| 国产精品女主播av| 国产亚洲精品7777| 精品伦理精品一区| 欧美日韩mp4| 色婷婷av一区二区三区大白胸| 国产精品亚洲а∨天堂免在线| 青娱乐精品视频在线| 天堂成人免费av电影一区| 亚洲美腿欧美偷拍| 国产精品国产三级国产普通话蜜臀 | 国产一区在线视频| 日韩精品久久理论片| 亚洲第一二三四区| 亚洲在线一区二区三区| 亚洲欧美日韩国产手机在线| 国产精品第四页| 国产精品电影一区二区三区| 日本一区二区动态图| 国产日韩欧美亚洲| 久久久久久久综合日本|