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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flash.c

?? 學習blob的簡單而有效的代碼
?? C
字號:
/*------------------------------------------------------------------------- * Filename:      flash.c * Version:       $Id: flash.c,v 1.12 1999/10/03 22:03:52 erikm Exp $ * Copyright:     Copyright (C) 1999, Jan-Derk Bakker * Author:        Jan-Derk Bakker <J.D.Bakker@its.tudelft.nl> * Description:   Flash I/O functions for blob * Created at:    Mon Aug 23 20:00:00 1999 * Modified by:   Erik Mouw <J.A.K.Mouw@its.tudelft.nl> * Modified at:   Sun Oct  3 22:21:46 1999 *-----------------------------------------------------------------------*//* * flash.c: Flash I/O functions for blob * * Copyright (C) 1999  Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * */#ident "$Id: flash.c,v 1.12 1999/10/03 22:03:52 erikm Exp $"#ifdef HAVE_CONFIG_H# include "config.h"#endif#include "main.h"#include "util.h"#include "serial.h"#include "flash.h"/* define for advanced flash functionality (not that it works) -- Erik *//* #define ADVANCED_FLASH 1 *//* Static function defs */static u32 EraseOne(const char *whichOne);#ifdef ADVANCED_FLASHstatic void GetBlockOrder(tBlkInfo *blocksInfo, u8 which, 			  u8 blockOrder[NUM_FLASH_BLOCKS]);#endif#ifdef ADVANCED_FLASHvoid ScanFlash(tBlkInfo *blocksInfo){/* 	Scans the flash for headers in the main blocks. Maybe in the future we will 	put the headers in one of the parameter blocks. */	int i,j;		j = 0;	for(i = 0; i < NUM_FLASH_BLOCKS; i++) {		MyMemCpy((u32 *) &(blocksInfo->headers[i]), 			FLASH_BLOCK_BASE + i * FLASH_BLOCK_SIZE,			sizeof(tBlkHdr) / 4);		/* Is this a 'first' block ? */		if(BLOCK_IN_USE(blocksInfo->headers[i]) 			&& (blocksInfo->headers[i].seqNum == 0))			blocksInfo->firstBlockIndex[j++] = i;	}		for(; j < NUM_FLASH_BLOCKS; j++)		blocksInfo->firstBlockIndex[j] = NO_BLOCK;} /* ScanFlash */#endif	#ifdef ADVANCED_FLASHvoid LoadBlocksToMem(tBlkInfo *blocksInfo, u8 which, u32 *baseAddr){/* Load a series of blocks to memory */	u8	blockOrder[NUM_FLASH_BLOCKS];	int	numBlocks = blocksInfo->headers[which].totSeq;	int	i;	u32	*srcAddr, *dstAddr = baseAddr;		/* If the block isn't in use, fail silently. */	if(!BLOCK_IN_USE(blocksInfo->headers[which]))		return;		GetBlockOrder(blocksInfo, which, blockOrder);					for(i = 0; i < numBlocks; i++) {		srcAddr = FLASH_BLOCK_BASE + 			blockOrder[i] * FLASH_BLOCK_SIZE + sizeof(tBlkHdr);		MyMemCpy(dstAddr, srcAddr, blocksInfo->headers[i].bytesInBlock / 4);		dstAddr += blocksInfo->headers[i].bytesInBlock / 4;	}} /* LoadBlocksToMem */#endif/* The spooky functions that write to the same flash that we're executing from */u32	data_from_flash(u32 what);u32	data_to_flash(u32 what);#define READ_ARRAY	0x00FF00FF#define ERASE_SETUP	0x00200020#define ERASE_CONFIRM	0x00D000D0#define	PGM_SETUP	0x00400040#define	STATUS_READ	0x00700070#define	STATUS_CLEAR	0x00500050#define STATUS_BUSY	0x00800080#define STATUS_ERASE_ERR	0x00200020#define STATUS_PGM_ERR	0x00100010void EraseBlocks(tBlockType which) {	char	*thisBlock;	int	numBlocks, i;	if(RunningFromInternal()) {		SerialOutputString("*** Can't erase -- running from internal flash.\r");		return;	}		if(which == blKernel) {		thisBlock = (char *)KERNEL_START;		numBlocks = NUM_KERNEL_BLOCKS;	}	else {		thisBlock = (char *)INITRD_START;		numBlocks = NUM_INITRD_BLOCKS;	}	for(i = 0; i < numBlocks; i++, thisBlock += MAIN_BLOCK_SIZE)		SerialOutputByte('.');		if((EraseOne(thisBlock) & STATUS_ERASE_ERR) != 0) {			SerialOutputString("\r*** Erase error at address 0x");			SerialOutputHex((u32)thisBlock);			SerialOutputByte('\r');			return;		}} /* EraseBlocks */void WriteBlocksFromMem(tBlockType type, const u32 *source, int length){	volatile u32	*flashBase;	u32	result;	int	maxLength, i;				if((u32)source & 0x03) {		SerialOutputString("*** Source is not on a word boundary: 0x");		SerialOutputHex((u32)source);		SerialOutputByte('\r');		return;	}		if(length & 0x03)		length += 0x04;	length &= ~((u32) 0x03);		if(type == blKernel) {		flashBase = (u32 *)KERNEL_START;		maxLength = KERNEL_LEN;	}	else {		flashBase = (u32 *)INITRD_START;		maxLength = INITRD_LEN;	}		if(length > maxLength)		length = maxLength;		for(i = 0; i < length; i+= 4, flashBase++, source++) {		if(i & 0xffff)			SerialOutputByte('.');		*flashBase = data_to_flash(PGM_SETUP);		*flashBase = *source;		do {			*flashBase = data_to_flash(STATUS_READ);			result = data_from_flash(*flashBase);		} while((~result & STATUS_BUSY) != 0);				*flashBase = data_to_flash(READ_ARRAY);		if((result & STATUS_PGM_ERR) != 0 || *flashBase != *source) {			SerialOutputString("\r*** Write error at address 0x");			SerialOutputHex((u32)flashBase);			SerialOutputByte('\r');			return;		}	}} /* WriteBlocksFromMem */static u32 EraseOne(const char *whichOne){/* Routine to erase one block of flash */	volatile u32 *writeMe = (u32 *)whichOne;	u32	result;		*writeMe = data_to_flash(ERASE_SETUP);	*writeMe = data_to_flash(ERASE_CONFIRM);		do {		*writeMe = data_to_flash(STATUS_READ);		result = data_from_flash(*writeMe);	} while((~result & STATUS_BUSY) != 0);		*writeMe = data_to_flash(READ_ARRAY);	return result;} /* EraseOne */#ifdef ADVANCED_FLASHstatic void GetBlockOrder(tBlkInfo *blocksInfo, u8 which, 			  u8 blockOrder[NUM_FLASH_BLOCKS]){	tBlockType	type = blocksInfo->headers[which].type;	char	*name = blocksInfo->headers[which].name;	int	i;		/* If the block isn't in use, fail silently. */	if(!BLOCK_IN_USE(blocksInfo->headers[which]))		return;		for(i = 0; i < NUM_FLASH_BLOCKS; i++) {		if(BLOCK_IN_USE(blocksInfo->headers[i]) && 			(blocksInfo->headers[i].type == type) &&			!MyStrNCmp(blocksInfo->headers[i].name, name, BLOCK_NAME_LEN)) {						blockOrder[blocksInfo->headers[i].seqNum] = i;		}	}} /* GetBlockOrder */#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟一区二区| 中文字幕一区二区三区四区不卡| 久久久久国产精品人| 亚洲在线观看免费| 丁香一区二区三区| 欧美一级夜夜爽| 亚洲猫色日本管| 国产成人免费视频一区| 日韩丝袜情趣美女图片| 一区二区欧美在线观看| 国产.欧美.日韩| 久久综合av免费| 日韩国产欧美在线播放| 色8久久精品久久久久久蜜| 久久久久高清精品| 精品一区二区三区免费播放| 欧美午夜精品一区| 亚洲视频资源在线| 国产不卡免费视频| 久久免费电影网| 麻豆成人av在线| 日韩一级免费一区| 青青草国产成人99久久| 欧美性大战久久久| 午夜a成v人精品| 4hu四虎永久在线影院成人| 亚洲一区在线电影| 欧美系列亚洲系列| 视频一区二区中文字幕| 欧美日韩在线观看一区二区 | 五月天国产精品| 日本道色综合久久| 亚洲精品五月天| 91麻豆国产福利精品| 最新欧美精品一区二区三区| 99久久精品免费看国产免费软件| 国产日韩欧美电影| proumb性欧美在线观看| 国产精品欧美久久久久无广告| 国产电影一区二区三区| 欧美激情一区二区三区不卡| 成人三级在线视频| 国产精品国产三级国产普通话三级| av电影天堂一区二区在线| 亚洲视频在线观看三级| 色婷婷av一区二区三区gif| 一区二区三区电影在线播| 欧美情侣在线播放| 激情久久久久久久久久久久久久久久| www国产成人免费观看视频 深夜成人网| 国产一区二区三区日韩| 久久精品欧美日韩| 色网站国产精品| 奇米精品一区二区三区在线观看一| 精品日韩在线一区| aaa欧美色吧激情视频| 亚洲gay无套男同| 日韩欧美国产成人一区二区| 国产精品一区二区在线观看不卡| 中文字幕一区av| 欧美伦理视频网站| 国产v日产∨综合v精品视频| 一区二区三区在线播| 91精品国产一区二区| 粉嫩久久99精品久久久久久夜| 亚洲综合久久久久| 26uuu亚洲综合色| 欧美三级中文字| 国产乱人伦精品一区二区在线观看| 中文字幕一区二区三区蜜月| 在线播放91灌醉迷j高跟美女 | 久久久久久99精品| 欧美性色综合网| 国产一区二区91| 亚洲第一综合色| 中文字幕的久久| 欧美成人a∨高清免费观看| 99天天综合性| 精品在线免费观看| 亚洲影院理伦片| 亚洲欧洲日韩女同| 久久亚洲免费视频| 欧美巨大另类极品videosbest| 成人一区在线观看| 久久精品99国产精品| 亚洲国产精品欧美一二99| 一区在线播放视频| 国产午夜亚洲精品羞羞网站| 欧美一区二区三区公司| 色先锋aa成人| av一本久道久久综合久久鬼色| 麻豆精品视频在线观看免费| 一区二区三区中文字幕电影| 国产精品家庭影院| 国产清纯白嫩初高生在线观看91 | 麻豆精品在线播放| 亚洲一区影音先锋| 亚洲精品成人悠悠色影视| 中文字幕精品一区二区精品绿巨人| 精品嫩草影院久久| 在线播放/欧美激情| 欧美军同video69gay| 欧美日韩亚洲综合在线| 色激情天天射综合网| 色综合婷婷久久| 色狠狠色狠狠综合| 一本大道久久a久久综合| 不卡视频一二三| 国产成人在线视频网址| 国产精品一区二区黑丝| 狠狠v欧美v日韩v亚洲ⅴ| 久久不见久久见免费视频7| 蜜桃久久久久久久| 蜜桃一区二区三区在线观看| 久久国产综合精品| 精品一区二区成人精品| 精品一区二区三区免费播放| 九九热在线视频观看这里只有精品| 日本不卡视频在线观看| 裸体一区二区三区| 国产精品一区2区| 国产高清亚洲一区| 9色porny自拍视频一区二区| 一本大道久久a久久综合| 欧美这里有精品| 91麻豆精品国产91久久久久久久久 | 日韩欧美一二三| 精品国产伦一区二区三区观看体验| 欧美精品一区二区在线观看| 国产亚洲一区二区三区在线观看| 日本一区二区免费在线观看视频 | 99精品国产视频| 色视频成人在线观看免| 欧美亚洲一区二区在线| 欧美久久一区二区| 久久精品一区蜜桃臀影院| 中文字幕一区二区三区精华液| 亚洲一区二区三区精品在线| 免费成人在线观看| 国产精品18久久久| 日本大香伊一区二区三区| 日韩午夜激情电影| 国产精品久久久久久亚洲毛片| 亚洲免费观看高清完整| 免费观看30秒视频久久| 成人av影视在线观看| 91麻豆高清视频| 精品国产一区二区三区久久久蜜月| 国产精品国产三级国产aⅴ入口| 亚洲第一av色| 国产大陆亚洲精品国产| 91国偷自产一区二区三区观看| 欧美成人性福生活免费看| 亚洲色图都市小说| 精品一区二区三区免费播放| 色狠狠色狠狠综合| 国产日韩欧美精品综合| 亚洲妇熟xx妇色黄| 成人性生交大片免费看中文网站| 欧美日韩国产系列| 国产精品美女www爽爽爽| 免费人成在线不卡| 一本一道综合狠狠老| 国产调教视频一区| 日本不卡的三区四区五区| 91免费视频观看| 久久久99精品免费观看| 免费看欧美女人艹b| 色老综合老女人久久久| 中文字幕 久热精品 视频在线| 亚洲不卡av一区二区三区| 91一区二区在线| 久久精品欧美日韩精品| 蜜臀精品久久久久久蜜臀| 日本乱人伦一区| 成人欧美一区二区三区| 福利一区福利二区| 精品不卡在线视频| 日本不卡免费在线视频| 欧美老女人第四色| 亚洲电影一区二区三区| 色视频成人在线观看免| 亚洲视频一区二区在线| 国产精品888| 国产人久久人人人人爽| 国产综合色产在线精品| 日韩精品一区二区三区中文不卡| 亚洲成人1区2区| 欧美主播一区二区三区美女| 一区二区三区在线观看欧美| 91亚洲国产成人精品一区二区三 | 成人97人人超碰人人99| 久久蜜桃av一区精品变态类天堂 | 蜜桃精品在线观看| 日韩欧美国产不卡| 九九九久久久精品| 精品区一区二区| 国产精品一二二区| 国产精品天干天干在线综合| 成人一区二区视频|