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

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

?? flash.c

?? 可移到ucos上的文件系統
?? C
?? 第 1 頁 / 共 2 頁
字號:

	if (bank >= FLASHBANKS) {
		printf("lastlargesector(%d) failed\n",bank);
		return(-1);
	}

	fbnk = &FlashBank[bank];
	sinfo = fbnk->sectors;
	largest_ssize = 0;
	largest_snum = 0;
	largest_sbase = (uchar *)0;

	for(i=0;i<fbnk->sectorcnt;i++,sinfo++) {
		if (sinfo->size >= largest_ssize) {
			largest_ssize = sinfo->size;
			largest_snum = sinfo->snum;
			largest_sbase = sinfo->begin;
		}
	}
	if (sector)
		*sector = largest_snum;
	if (size)
		*size = largest_ssize;
	if (base)
		*base = largest_sbase;
	return(0);
}

void
LowerFlashProtectWindow()
{
	if (FlashProtectWindow)
		FlashProtectWindow--;
}

/* AppFlashWrite():
 *	Takes in a source, destination and byte count and converts that to
 *	the appropriate flashwrite() call.  This function supports the possibility
 *	of having one write request span across multiple devices in contiguous
 *	memory space.
 */
int
AppFlashWrite(dest,src,bytecnt)
ulong	*src, *dest;
long bytecnt;
{
	struct flashinfo *fbnk;
	ulong	oints;
	int		ret;
	long	tmpcnt;

	ret = 0;
	while(bytecnt > 0) {
		fbnk = addrtobank((uchar *)dest);
		if (!fbnk)
			return(-1);
	
		if (((int)dest + bytecnt) <= (int)(fbnk->end))
			tmpcnt = bytecnt;
		else
			tmpcnt = ((int)(fbnk->end) - (int)dest) + 1;
	
		oints = FLASH_INTSOFF();
		ret = flashwrite(fbnk,(uchar *)dest,(uchar *)src,tmpcnt);
		FLASH_INTSRESTORE(oints);
		if (ret < 0) {
			printf("AppFlashWrite(0x%lx,0x%lx,%ld) failed\n",
				(ulong)dest,(ulong)src,bytecnt);
			break;
		}
		(int)dest += tmpcnt;
		(int)src += tmpcnt;
		bytecnt -= tmpcnt;
	}
	return(ret);
}

int
AppFlashEraseAll()
{
	int		ret, i;
	ulong	oints;
	struct	flashinfo *fbnk;

	oints = FLASH_INTSOFF();
	fbnk = FlashBank;
	for(i=0;i<FLASHBANKS;i++,fbnk++) {
		ret = flasherase(fbnk,ALL_SECTORS);
		if (ret == -1)
			break;
	}
	FLASH_INTSRESTORE(oints);
	return(ret);
}

/* Erase the flash sector specified. */
int
AppFlashErase(snum)	/* erase specified sector */
int snum;
{
	ulong	oints;
	uchar	*base;
	int		ret, size;
	struct	flashinfo *fbnk;

	sectortoaddr(snum,&size,&base);
	fbnk = addrtobank(base);
	if (!fbnk)
		return(-1);
	oints = FLASH_INTSOFF();
	ret = flasherase(fbnk,snum);
	FLASH_INTSRESTORE(oints);
	return(ret);
}


/* srange():
 *	Take the incoming string to be a number, number range or the string
 *	'all'. Return...
 *		SRANGE_ERROR	for error;
 *		SRANGE_SINGLE	for single sector (loaded in *lo);
 *		SRANGE_RANGE	for sector range (loaded in *lo & *hi);
 *		SRANGE_ALL		for all sectors.
 */
int
srange(char *rangestring, int *lo, int *hi)
{
	int	num1, num2;
	char *dash;

	if (!strcmp(rangestring,"all")) {
		*lo = ALL_SECTORS; 
		return(SRANGE_ALL);
	}

	dash = strchr(rangestring,'-');
	if (!dash) {
		if (isdigit(*rangestring)) {
			*lo = atoi(rangestring);
			return(SRANGE_SINGLE);
		}
		else
			return(SRANGE_ERROR);
	}
	*dash = 0;
	num1 = atoi(rangestring);
	num2 = atoi(dash+1);
	if (((num1 < 0) || (num2 < 0)) || (num1 >= num2))
		return(SRANGE_ERROR);
	*lo = num1;
	*hi = num2;
	return(SRANGE_RANGE);
}

/* sectorProtect():
 *	Set or clear (based on value of protect) the protected flag for the
 *	specified range of sectors...
 */
int
sectorProtect(char *range, int protect)
{
	struct	flashinfo *fbnk;
	int	i, lo, hi, all, dev, snum;

	all = 0;
	switch(srange(range,&lo,&hi)) {
	case SRANGE_ERROR:
		return(-1);
	case SRANGE_ALL:
		all = 1;
		break;
	case SRANGE_SINGLE:
		hi = lo;
		break;
	case SRANGE_RANGE:
		break;
	}
	snum = 0;
	for(dev=0;dev<FLASHBANKS;dev++) {
		fbnk = &FlashBank[dev];
		for(i=0;i<fbnk->sectorcnt;i++,snum++) {
			if (all || ((snum >= lo) && (snum <= hi)))
				fbnk->sectors[i].protected = protect;
		}
		if (snum > hi)
			break;
	}
	return(0);
}

#ifdef FLASHRAM_BASE
/* FlashRamInit():
 * This monitor supports TFS space allocated across multiple flash devices
 * that may not be in contiguous memory space.  To allow BBRAM to be seen
 * as a "flash-like" device to TFS, we set it up in sectors similar to
 * those in a real flash device.
 * Input...
 *	snum:	All the "flash" space is broken up into	individual sectors.
 *			This is the starting sector number that is to be used for
 *			the block of sectors within this BBRAM space.
 *	fbnk:	Pointer to the structure that must be populated with the
 *			flash bank information.  Usually this contains pointers to the
 *			functions that operate on the flash; but for RAM they aren't
 *			necessary.
 *	sinfo:	Table populated with the characteristics (size, start, etc...)
 *			of each sector.
 *	ssizes:	A table containing the size of each of the sectors.  This is
 *			copied to the sinfo space.
 */
int
FlashRamInit(int snum, int scnt, struct flashinfo *fbnk,
			struct sectorinfo *sinfo, int *ssizes)
{
	int	i;
    uchar	*begin;

	/* FLASHRAM_SECTORCOUNT (in config.h) must match the number of sectors
	 * allocated to the flash ram device in flashdev.c...
	 */
	if (scnt != FLASHRAM_SECTORCOUNT)
		printf("Warning: flashram sector count inconsistency\n");

    fbnk->id = FLASHRAM;						/* Device id. */
    fbnk->base = (uchar *)FLASHRAM_BASE;		/* Base address of bank. */
    fbnk->end = (uchar *)FLASHRAM_END;			/* End address of bank. */
    fbnk->sectorcnt = scnt;						/* Number of sectors. */
    fbnk->width = 1;							/* Width (in bytes). */
    fbnk->fltype = NotUsed;						/* Flashtype() function. */
    fbnk->flerase = NotUsed;					/* Flasherase() function. */
    fbnk->flwrite = NotUsed;					/* Flashwrite() function. */
    fbnk->flewrite = NotUsed;					/* Flashewrite() function. */
    fbnk->sectors = sinfo;					/* Ptr to sector size table. */
    begin = fbnk->base;
    for(i=0;i<fbnk->sectorcnt;i++,snum++) {
		sinfo[i].snum = snum;
		sinfo[i].size = ssizes[i];
		sinfo[i].begin = begin;
		sinfo[i].end = sinfo[i].begin + sinfo[i].size - 1;
		sinfo[i].protected = 0;
		begin += sinfo[i].size;
	}
	return(snum);
}
#endif

char *FlashHelp[] = {
	"Flash memory operations",
	"{op} [args]",
	"Ops...",
	"  opw",
	"  info",
	"  init",
	"  bank [#]",
	"  prot {SRNG}",
	"  unprot {SRNG}",
#if FLASH_LOCK_SUPPORTED
	"  lock {SRNG}",
	"  unlock {SRNG}",
	"  lockdwn {SRNG}",
#endif
	"  erase {SRNG}",
	"  write {dest} {src} {byte_cnt}",
	"  ewrite {dest} {src} {byte_cnt}",
	"",
	" SRNG..."
	"  Sector range specification: X, | X-Y | all",
	"  Where 'X' and 'Y' are sector numbers.",
	0,
};

/* FlashCmd():
 *	Code that handles the user interface.  See FlashHelp[] below for usage.
 */
int
FlashCmd(argc,argv)
int argc;
char **argv;
{
	int		snum, ret, lo, hi;
	ulong	dest, src, oints;
	long	bytecnt, rslt;
	struct	flashinfo *fbnk;

	oints = FLASH_INTSOFF();

	fbnk = &FlashBank[FlashCurrentBank];
	ret = 0;

	if (strcmp(argv[1],"init") == 0)
		FlashInit();
	else if (strcmp(argv[1],"info") == 0)
		showflashinfo(fbnk);
	else if (strcmp(argv[1],"bank") == 0)  {
		int	tmpbank;
		if (argc == 3) {
			tmpbank = atoi(argv[2]);
			if (tmpbank < FLASHBANKS)
				FlashCurrentBank = tmpbank;
			printf("Subsequent flash ops apply to bank %d\n",FlashCurrentBank);
		}
		else 
			printf("Current flash bank: %d\n",FlashCurrentBank);
	}
	else if (strcmp(argv[1],"ewrite") == 0) {
		if (argc == 5) {
			dest = strtoul(argv[2],(char **)0,0);
			src = strtoul(argv[3],(char **)0,0);
			bytecnt = (long)strtoul(argv[4],(char **)0,0);
			if (flashewrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt) == -1)
				printf("ewrite failed\n");
		}
		else
			ret = -1;
	}
	else if (!strcmp(argv[1],"write")) {
		if (argc == 5) {
			dest = strtoul(argv[2],(char **)0,0);
			src = strtoul(argv[3],(char **)0,0);
			bytecnt = (long)strtoul(argv[4],(char **)0,0);
			rslt = flashwrite(fbnk,(uchar *)dest,(uchar *)src,bytecnt);
			if (rslt == -1)
				printf("Write failed\n");
		}
		else
			ret = -1;
	}
	else if (!strcmp(argv[1],"opw")) {
		FlashProtectWindow = 2;
	}
	else if (!strcmp(argv[1],"unprot")) {
		if (argc != 3)
			ret = -1;
		else
			sectorProtect(argv[2],0);
	}
	else if (!strcmp(argv[1],"prot")) {
		if (argc != 3) 
			ret = -1;
		else
			sectorProtect(argv[2],1);
	}
	else if (!strcmp(argv[1],"erase")) {
		if (argc != 3) {
			ret = -1;
		}
		else {
			switch(srange(argv[2],&lo,&hi)) {
			case SRANGE_ERROR:
				hi = 0;
				lo = 1;
				ret = -1;
				break;
			case SRANGE_ALL:
			case SRANGE_SINGLE:
				hi = lo;
				break;
			case SRANGE_RANGE:
				break;
			}
			for(snum=lo;snum<=hi;snum++) {
				rslt = flasherase(fbnk,snum);
				if (rslt == -1) {
					printf("Erase failed\n");
					break;
				}
			}
		}
	}
#if FLASH_LOCK_SUPPORTED
	else if ((!strcmp(argv[1],"lock")) || (!strcmp(argv[1],"unlock")) ||
		(!strcmp(argv[1],"lockdwn"))) {
		extern int flashlock(struct flashinfo *fbnk,int snum,int operation);
		int	operation, snum;

		if (!strcmp(argv[1],"lock")) 
			operation = FLASH_LOCK;
		else if (!strcmp(argv[1],"unlock")) 
			operation = FLASH_UNLOCK;
		else
			operation = FLASH_LOCKDWN;
		if (argc != 3)
			ret = -1;
		else {
			switch(srange(argv[2],&lo,&hi)) {
			case SRANGE_ERROR:
				hi = 0;
				lo = 1;
				ret = -1;
				break;
			case SRANGE_ALL:
			case SRANGE_SINGLE:
				hi = lo;
				break;
			case SRANGE_RANGE:
				break;
			}
			for(snum=lo;snum<=hi;snum++) {
				rslt = flashlock(fbnk,snum,operation);
				if (rslt == -1) {
					printf("Erase failed\n");
					break;
				}
			}
		}
	}
#endif
	else {
		ret = -1;
	}

	FLASH_INTSRESTORE(oints);
	return(ret);
}

int
NotUsed()
{
	printf("ERROR: flash operation not supported\n");
	return(0);
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品欧美日韩精品| 91理论电影在线观看| 丰满放荡岳乱妇91ww| 欧美自拍偷拍一区| 日本一区二区三区四区 | 偷拍日韩校园综合在线| 国产精品综合一区二区| 欧美日韩一区在线观看| 欧美激情一区二区三区不卡| 日本不卡1234视频| 欧美午夜电影在线播放| 国产精品久久久久久久午夜片| 丝袜亚洲另类欧美综合| 在线看日本不卡| 国产精品久久久久影院色老大| 久久99国产精品久久99 | 一区二区在线看| 国产盗摄一区二区三区| 日韩亚洲欧美一区二区三区| 亚洲永久免费av| 91啦中文在线观看| 中文字幕中文字幕一区| 国产69精品久久777的优势| 欧美电影免费提供在线观看| 天天爽夜夜爽夜夜爽精品视频 | 国产精品资源站在线| 欧美一区二区三区在线观看| 亚洲国产精品精华液网站| 色综合中文字幕国产| 精品三级在线观看| 丝袜国产日韩另类美女| 欧美中文字幕亚洲一区二区va在线 | 精品国产免费人成电影在线观看四季| 一级中文字幕一区二区| 日本久久电影网| 亚洲精品日韩专区silk| 91福利国产精品| 一区二区三区蜜桃| 欧美日本精品一区二区三区| 午夜伊人狠狠久久| 日韩一级高清毛片| 久久电影网电视剧免费观看| 精品国产凹凸成av人网站| 国产一区二区三区香蕉| 久久精品一二三| 99久久er热在这里只有精品66| 国产精品不卡在线观看| 在线亚洲精品福利网址导航| 亚洲国产精品视频| 日韩一区和二区| 国产乱码精品一区二区三| wwww国产精品欧美| 国产成人欧美日韩在线电影| 国产精品久久久爽爽爽麻豆色哟哟 | 成人精品国产免费网站| 亚洲人成精品久久久久久 | 国产91综合网| 综合激情成人伊人| 欧美日韩久久一区| 免费三级欧美电影| 日本一二三四高清不卡| 99久久久精品| 五月天婷婷综合| 2021国产精品久久精品| 99精品视频在线观看| 亚洲成人免费在线| 精品少妇一区二区三区视频免付费| 国产一区欧美一区| 亚洲男人的天堂在线aⅴ视频| 欧美日韩成人综合在线一区二区| 青青国产91久久久久久| 国产婷婷色一区二区三区四区| 99精品视频在线播放观看| 天堂成人国产精品一区| 国产视频视频一区| 欧美吻胸吃奶大尺度电影 | 午夜视黄欧洲亚洲| 久久久综合网站| 91精品福利视频| 国产在线不卡一区| 午夜电影一区二区三区| 国产精品成人一区二区三区夜夜夜| 欧美日韩免费一区二区三区视频| 国产精品一区二区不卡| 亚洲国产一区二区a毛片| 欧美国产日韩精品免费观看| 制服丝袜一区二区三区| 99精品视频在线观看| 韩国女主播成人在线| 亚洲一区二区精品视频| 国产精品久久福利| www成人在线观看| 欧美肥胖老妇做爰| 91在线无精精品入口| 国产精品影视在线观看| 日韩av网站在线观看| 亚洲精品国产a| 中文无字幕一区二区三区 | 在线一区二区三区四区| 国产毛片精品一区| 视频一区欧美日韩| 亚洲午夜av在线| 亚洲人午夜精品天堂一二香蕉| 久久蜜桃av一区二区天堂| 日韩精品一区二区三区蜜臀| 在线不卡中文字幕播放| 欧美日韩你懂得| 欧美日韩国产成人在线91| 色老汉av一区二区三区| 99视频精品在线| av一二三不卡影片| 成人动漫一区二区在线| 成人性生交大片免费看在线播放 | 欧美欧美午夜aⅴ在线观看| 99久久国产综合精品色伊| 成人av动漫在线| 东方aⅴ免费观看久久av| 国产精品系列在线观看| 成人一二三区视频| av亚洲精华国产精华精华| av在线不卡电影| 一本大道久久a久久精二百| 91看片淫黄大片一级在线观看| 99精品视频一区二区| 91丨九色丨尤物| 欧美日韩精品一区二区三区四区 | 裸体一区二区三区| 高清在线观看日韩| 国内精品不卡在线| 激情都市一区二区| 国产99久久久国产精品免费看| 国产不卡免费视频| 91在线云播放| 欧美日韩久久久久久| 日韩片之四级片| 久久久久久免费网| 亚洲视频一区二区在线观看| 亚洲视频免费在线观看| 亚洲h在线观看| 国产一区欧美二区| 一本一道久久a久久精品综合蜜臀| 欧美性大战久久| 91在线码无精品| 欧美一级欧美一级在线播放| 久久亚洲综合av| 亚洲精品日产精品乱码不卡| 日本中文字幕一区二区视频| 国产一区二区免费视频| 91日韩一区二区三区| 欧美精品色综合| 国产欧美1区2区3区| 亚洲午夜免费视频| 精品无码三级在线观看视频| 成人黄色软件下载| 51久久夜色精品国产麻豆| 久久免费的精品国产v∧| 亚洲免费在线看| 精品亚洲成av人在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产在线麻豆精品观看| 93久久精品日日躁夜夜躁欧美| 欧美日韩国产一级二级| 欧美激情综合五月色丁香 | 亚洲乱码国产乱码精品精可以看| 日韩在线a电影| 成人开心网精品视频| 日韩一区二区三区高清免费看看| 国产日韩精品一区二区三区| 视频一区欧美精品| 色综合中文综合网| 一本大道久久a久久综合| 欧美大片拔萝卜| 亚洲超碰精品一区二区| 成人污污视频在线观看| 日韩免费观看高清完整版在线观看| 日韩美女久久久| 国产精品18久久久久久久久| 91精品麻豆日日躁夜夜躁| 一区二区国产盗摄色噜噜| 国产不卡视频一区| 精品久久人人做人人爽| 亚洲成人av一区二区| 日本高清成人免费播放| 国产精品三级视频| 国产毛片精品一区| 精品国产麻豆免费人成网站| 男女性色大片免费观看一区二区| 91成人免费在线| 亚洲美女精品一区| 91老师片黄在线观看| 1区2区3区欧美| 成人免费观看视频| 国产婷婷色一区二区三区四区| 久久精品国产99久久6| 制服丝袜日韩国产| 日韩二区三区四区| 宅男在线国产精品| 日韩电影在线一区二区三区| 911国产精品| 免费观看久久久4p|