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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bios.c

?? ARM 4510 bootloader,完整的工程實(shí)例
?? C
字號(hào):
#include "types.h"
#include "console.h"
#include "utils.h"
#include "39vf160.h"


#define	MAX_CMD_LEN	128
#define	MAX_ARGS	MAX_CMD_LEN/4
#define	ENTER_KEY	0x0d
#define	BACK_KEY	0x08
#define	ESC_KEY		0x1b

int IP_ADDRESS = 0xc0a80064;
unsigned int SERIAL_BAUD;
#define	DFT_SERIAL_BAUD	57600

#define	DFT_DOWNLOAD_ADDR	0x8000
#define	DFT_PROGRAM_BEGIN	0
unsigned int download_addr;
unsigned int program_begin;	

const char PROMPT[] = "\\>";
const char star_line[] = "/*************************************************************/\n";
#define	prompt()	puts(PROMPT)

/************************************************/
int tftp_main(unsigned long ip, unsigned long addr, int method);

int LoadFile2Mem(int argc, char *argv[])
{
	
	if(argc<2)
	{
		download_addr = DFT_DOWNLOAD_ADDR;
		printf("No begin address for download, use default address 0x%x\n", download_addr);
	}
	else
		download_addr = strtoul(argv[1]);
	
	tftp_main(IP_ADDRESS, download_addr, 0);

	return 0;
}

int ProgFlash(int argc, char *argv[])
{
	unsigned int size = ~0;
	unsigned int data_begin = ~0;
	unsigned int prog_begin = ~0;
	int overwrite0 = 1;
	int modify_a0 = 0;
	unsigned int bios_load_addr;		 

	if(argc<4)
	{		
		puts("Arguments error!\n");
		puts("Usage:	prog a1 a2 size [-no0]\na1 = program begin address\na2 = data pointer to ram\nsize = program size(Bytes)\n-no0 = don't overwrite address 0\n");
		return -1;
	}	
		
	prog_begin = strtoul(argv[1]);			
	data_begin = strtoul(argv[2]);
	size       = strtoul(argv[3]);
	
	if(size==0)
	{
		puts("Write 0 Bytes!\n");
		return -1;
	}
	
	if(prog_begin==-1||data_begin==-1)		//
	{
		puts("Arguments error\n");
		return -1;
	}	
	
	printf("program flash begin @0x%x, from ram data @0x%x, size = %dBytes\nAre you sure? [y/n]", prog_begin, data_begin, size);
	while(1)
	{
		if(kbhit())
		{
			int key = getch();
			if(key=='y'||key=='Y')
			{
				putch(key);
				next_line();
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				next_line();
				return 0;
			}				
		}
			
	}		

#define	__ROM_SIZE	0x200000
#define	BIOS_BASE	(__ROM_SIZE-0x10000)
#define	BIOS_LOAD	(__ROM_SIZE-4)
	
	if(argc>4)
		if(strncmp(argv[4], "-no0", 4)==0)
			overwrite0 = 0;		
	
	if((prog_begin==0)&&overwrite0)
	{
		unsigned int ins;
		
		
		ins = *(unsigned int *)data_begin;				
		if((ins>>24)==0xea)			// instruction:	b	xxxx, now just support b instruction!!!			
			bios_load_addr = ((ins&0xffffff)<<2)+8;
		else
			bios_load_addr = 4;		// other instruction, jump to 4
													
		bios_load_addr = (bios_load_addr-BIOS_LOAD-8)/4;
		bios_load_addr = (bios_load_addr&0xffffff)|0xea000000;					
				
		*(unsigned int *)data_begin = 0xea000000+(BIOS_BASE-8)/4;				
		
		modify_a0 = 1;
	}
	
	SectorProg(prog_begin, (unsigned short *)data_begin, size);
	
	if(modify_a0)
	{
		size = FlashSector(size-1)+SECTOR_SIZE;				
		
		FlashRead(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);			
		*(unsigned int *)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4) = bios_load_addr;
		SectorProg(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);			
	}
		
	
	return 0;
}

void trans_to_boot(int, int);

int BootLoader(int argc, char *argv[])
{
	int key;
	
	puts("boot from flash, are you sure? [y/n]");
	while(1)
	{
		if(kbhit())
		{
			key = getch();
			if(key=='y'||key=='Y')
			{
				putch(key);
				next_line();
				trans_to_boot(BIOS_BASE, BIOS_LOAD);												
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				next_line();
				break;	
			}
		}			
	}
	
	return 0;
}

int AutoProgFlash(int argc, char *argv[])
{
	char ch_tmp[3][10];
	char *para_ptr[4];	
		
	ultostr(ch_tmp[0], 0);	
	ultostr(ch_tmp[1], DFT_DOWNLOAD_ADDR);	 	
	ultostr(ch_tmp[2], tftp_main(IP_ADDRESS, DFT_DOWNLOAD_ADDR, 1));		
	
	para_ptr[1] = ch_tmp[0];
	para_ptr[2] = ch_tmp[1];
	para_ptr[3] = ch_tmp[2];	
	
	ProgFlash(4, para_ptr);
	return	0;	
}

int CopyFlash(int argc, char *argv[])
{
	unsigned int src, dst, size;
	char tmp[10];
	
	if(argc<4)
	{
		puts("Usage : copy a1 a2 size\n");
		puts("a1 = src address, a2 = dst address, size = copy bytes (all in hex)\n");
		return -1;
	}
	
	src  = strtoul(argv[1]);
	dst  = strtoul(argv[2]);
	size = strtoul(argv[3]);
	if(src==-1||dst==-1||size==-1)
	{
		puts("give error address\n");
		return	-1;
	}	
	
	FlashRead(src, (unsigned short *)DFT_DOWNLOAD_ADDR, size);
	
	argv[1] = argv[2];
	argv[2] = tmp;
	ultostr(tmp, DFT_DOWNLOAD_ADDR);
	
	ProgFlash(4, argv);

	return 0;
}

int SetIPAddr(int argc, char *argv[])
{
	int i, j, err = 0;
	char *str;
	int ip[4];
	char ch = '.';
	
	if(argc<2)
	{
		printf("IP address : %u.%u.%u.%u\n", (IP_ADDRESS>>24)&0xff, (IP_ADDRESS>>16)&0xff, (IP_ADDRESS>>8)&0xff, IP_ADDRESS&0xff);
		return 0;
	}
	
	str = argv[1];
	
	for(j=0; j<4; j++)
	{
		if(j==3)
			ch = 0;
		i = 0;
		if(str[++i]!=ch)
			if(str[++i]!=ch)
				if(str[++i]!=ch)
					err = 1;
		str[i] = 0;
		ip[j] = CharToDec(str, i);
		if(ip[j]<0||ip[j]>254||err)
		{
			puts("IP address error\n");
			return -1;
		}			
		str += i+1;
	}
	
	printf("Set IP address : %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);					
	IP_ADDRESS = (ip[0]<<24)|(ip[1]<<16)|(ip[2]<<8)|ip[3];
	
	return 0;	
}

int LoadFromUart(int argc, char *argv[])
{
	int start, time_out;
	int load_addr = DFT_DOWNLOAD_ADDR;		
		
	if(argc>1)
	{
		start = strtoul(argv[1]);
		if(load_addr>0)
			load_addr = start;						
	}
	start = load_addr;
	
#define WAIT_TIME	0x500000	
	time_out = WAIT_TIME;	
	do{
		if(kbhit())
		{
			*((unsigned char *)load_addr++) = getkey();
			time_out = WAIT_TIME;
		}
	}while(--time_out);
	
	printf("Received 0x%x bytes from serial port.\n", load_addr-start);
	
	return 0;
#undef	WAIT_TIME	
}

int RunProgram(int argc, char *argv[])
{
	void (*fp)(void) = (void (*)(void))DFT_DOWNLOAD_ADDR;
	
	if(argc>1)
	{
		int	p = strtoul(argv[1]);
		if(p>0)
			fp = (void (*)(void))p;			
	}
	
	printf("Run program from 0x%x, are you aure? [y/n]", fp);
	
	while(1)
	{
		if(kbhit())
		{
			int key = getkey();
			if(key=='y'||key=='Y')
			{
				putch(key);
				next_line();
				break;
			}
			if(key=='n'||key=='N')
			{
				putch(key);
				next_line();
				return 0;
			}				
		}
	}
	
	(*fp)();
	
	return 0;		
}

extern unsigned int BaudParameters[6];
int SetBaudRate(int argc, char *argv[])
{
	int i;	
	
	for(i=0; i<6; i++)
		printf("%d : %d\n", i, BaudParameters[i]);
		
	puts("Please enter choice : ");
	
	while(1)
	{
		int ch = getch();
		
		if(ch<='6'||ch>='0')
		{
			SERIAL_BAUD = BaudParameters[ch-'0'];
			printf("Baud rate set to : %d\nPress any key to continue\n", SERIAL_BAUD);
			i = 0x4000;
			while(i--);		//wait transmit end
			console_init(SERIAL_BAUD);
			getch();
			break;
		}
			
	}	

	return 0;
}

/************************************************/
int Help(int argc, char *argv[]);

typedef int (*cmdproc)(int argc, char *argv[]);
typedef struct {
	const char *cmd;
	const char *hlp;
	cmdproc proc;
}CMD_STRUC;

CMD_STRUC CMD_INNER[] =
				{ 
					{"help", "show help", Help},
					{"?", "= help", Help},	
					{"load", "load file to memory", LoadFile2Mem},
					{"prog", "program flash", ProgFlash},
					{"boot", "boot from flash", BootLoader},
					{"ap", "auto load image flie and program flash", AutoProgFlash},
					{"comload", "load file from serial port", LoadFromUart},
					{"run", "run from ram", RunProgram},									
					{"copy", "copy flash from src to dst address", CopyFlash},
					{"ipcfg", "show or set IP address", SetIPAddr},
					{"setbaud", "set baud rate", SetBaudRate},
					{NULL, NULL, NULL}
				};

int Help(int argc, char *argv[])
{
	int i;	
	
	for(i=0; CMD_INNER[i].cmd!=NULL; i++)
	{
		if(CMD_INNER[i].hlp!=NULL)
		{
			printf(CMD_INNER[i].cmd);
			puts("	------	");
			printf(CMD_INNER[i].hlp);
			putch('\n');
		}
	}
	
	return 0;
}

/************************************************/
static void ParseArgs(char *cmdline, int *argc, char **argv)
{
#define STATE_WHITESPACE	0
#define STATE_WORD			1

	char *c;
	int state = STATE_WHITESPACE;
	int i;

	*argc = 0;

	if(strlen(cmdline) == 0)
		return;

	/* convert all tabs into single spaces */
	c = cmdline;
	while(*c != '\0')
	{
		if(*c == '\t')
			*c = ' ';
		c++;
	}
	
	c = cmdline;
	i = 0;

	/* now find all words on the command line */
	while(*c != '\0')
	{
		if(state == STATE_WHITESPACE)
		{
			if(*c != ' ')
			{
				argv[i] = c;		//將argv[i]指向c
				i++;
				state = STATE_WORD;
			}
		}
		else
		{ /* state == STATE_WORD */
			if(*c == ' ')
			{
				*c = '\0';
				state = STATE_WHITESPACE;
			}
		}
		c++;
	}
	
	*argc = i;
#undef STATE_WHITESPACE
#undef STATE_WORD
}

static int GetCmdMatche(char *cmdline)
{
	int i;	
	
	for(i=0; CMD_INNER[i].cmd!=NULL; i++)
	{
		if(strncmp(CMD_INNER[i].cmd, cmdline, strlen(CMD_INNER[i].cmd))==0)
			return i;
	}
	
	return -1;
}

static int ParseCmd(char *cmdline, int cmd_len)
{
	int argc, num_commands;
	char *argv[MAX_ARGS];

	ParseArgs(cmdline, &argc, argv);

	/* only whitespace */
	if(argc == 0) 
		return 0;
	
	num_commands = GetCmdMatche(argv[0]);
	if(num_commands<0)
		return -1;
		
	if(CMD_INNER[num_commands].proc!=NULL)	
		CMD_INNER[num_commands].proc(argc, argv);
				
	return 0;			
}

/************************************************/

int main()
{
	char command[MAX_CMD_LEN];
	char key;
	int i;
//	unsigned short tmp[32];
	
	console_init(DFT_SERIAL_BAUD);
	next_line();
	puts(star_line);
	puts("Bios for download and program.\n");
	puts("Author Jerry\n");
	puts("Build date : "__DATE__" Time : "__TIME__"\n");	
	printf("Type help for help.\n");
	puts(star_line);	
	prompt();
	
//		printf("%x", ReadSWPID());		
//		for(i = 0; i<32; i++)
//			tmp[i] = 32-i;
//		FlashProg(0x40000, tmp, 32);	
//		SectorErase(0x40000);	
	
	i = 0;
	
	for(;;)
	{
		if(kbhit())
		{
			key = getch();
			if(key==BACK_KEY)
			{			
				i -= i?1:0;
				putch(key);
			}
			else
			if(key==ENTER_KEY)
			{
				int tmp;
				command[i] = 0;
				next_line();
				tmp = ParseCmd(command, i);
				if(tmp<0)
					puts("Bad command\n");
				prompt();
				
				i = 0;
			}
			else
			{
				if(i<MAX_CMD_LEN-1)
					command[i++] = key;
					putch(key);
			}				
		}
	}
	
}



unsigned int pIrqStart, pIrqFinish, pIrqHandler;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品官网| 天天色 色综合| 26uuu国产日韩综合| 91精品国产91综合久久蜜臀| 欧美日韩免费视频| 91精品国产综合久久久久久漫画| 欧美色网一区二区| 在线综合+亚洲+欧美中文字幕| 欧美日韩日日夜夜| 日韩欧美在线一区二区三区| 欧美一卡二卡三卡| 日韩美女视频一区二区在线观看| 精品国产一区二区三区av性色| 日韩欧美不卡在线观看视频| 国产日产欧产精品推荐色| 中文字幕亚洲不卡| 午夜精品在线看| 国产麻豆视频一区| av成人动漫在线观看| 欧美在线综合视频| 欧美成人综合网站| 国产农村妇女毛片精品久久麻豆| 亚洲欧美另类在线| 日韩高清中文字幕一区| 国产美女视频91| 色哟哟欧美精品| 日韩一区二区三区在线视频| 国产欧美一区二区三区在线看蜜臀 | www.日韩av| 欧美性欧美巨大黑白大战| 欧美一卡2卡3卡4卡| 欧美国产激情二区三区| 午夜欧美一区二区三区在线播放| 国产一区二区三区不卡在线观看| 99久久777色| 精品国产一区二区在线观看| 一区二区三区不卡视频| 麻豆专区一区二区三区四区五区| 成人av免费在线播放| 日韩欧美在线不卡| 亚洲日本护士毛茸茸| 免费观看在线综合色| 色噜噜狠狠一区二区三区果冻| 欧美sm极限捆绑bd| 亚洲成人免费看| 粉嫩蜜臀av国产精品网站| 欧美精品xxxxbbbb| 亚洲精品国产无天堂网2021| 国产成人在线视频网址| 日韩一级二级三级| 亚洲一区二区三区激情| 99精品桃花视频在线观看| 欧美成人一区二区三区| 婷婷丁香久久五月婷婷| 欧美一区二区三区色| 一区二区三区四区视频精品免费| 黄色小说综合网站| 欧美日韩视频一区二区| 一个色综合网站| 成人美女视频在线观看18| 2021中文字幕一区亚洲| 日本在线不卡视频一二三区| 欧美丝袜丝nylons| 一区二区三区免费| 91农村精品一区二区在线| 欧美国产一区视频在线观看| 国产呦萝稀缺另类资源| 欧美一级高清片| 天堂影院一区二区| 91精品婷婷国产综合久久| 视频一区中文字幕国产| 欧美撒尿777hd撒尿| 亚洲午夜免费电影| 精品视频在线看| 偷拍日韩校园综合在线| 欧美日韩1234| 免费成人你懂的| 精品乱码亚洲一区二区不卡| 狠狠色丁香久久婷婷综| 2023国产精品视频| 国产麻豆欧美日韩一区| 欧美激情综合网| av电影在线观看一区| 一区二区免费看| 欧美制服丝袜第一页| 日韩中文字幕麻豆| 欧美成人欧美edvon| 从欧美一区二区三区| 中文字幕一区在线观看视频| 色哟哟一区二区三区| 日本不卡视频在线| 国产亚洲精品超碰| 91热门视频在线观看| 天天做天天摸天天爽国产一区| 日韩欧美在线观看一区二区三区| 国产在线播放一区二区三区| 亚洲丝袜制服诱惑| 欧美肥妇毛茸茸| 国产精品99久久不卡二区| 中文字幕在线不卡国产视频| 欧美日精品一区视频| 精彩视频一区二区| **欧美大码日韩| 欧美一区二区女人| 99久久久国产精品免费蜜臀| 日精品一区二区| 久久久久久97三级| 欧美性一区二区| 久久99精品久久久久久| 亚洲欧美另类图片小说| 日韩美女视频在线| 色诱亚洲精品久久久久久| 免费观看日韩电影| 日韩毛片一二三区| 精品国产1区二区| 色999日韩国产欧美一区二区| 老司机精品视频在线| 中文字幕一区二区三中文字幕| 欧美日韩电影一区| 99精品久久只有精品| 韩国av一区二区三区在线观看| 亚洲欧洲综合另类| 国产亚洲一本大道中文在线| 777色狠狠一区二区三区| 91原创在线视频| 狠狠久久亚洲欧美| 日本欧美一区二区三区乱码| 一区二区三区电影在线播| 国产亚洲一区二区三区| 欧美成人bangbros| 欧美电影一区二区| 欧美天堂一区二区三区| 色先锋资源久久综合| 成人久久18免费网站麻豆| 精品中文字幕一区二区小辣椒| 日韩综合小视频| 亚洲中国最大av网站| 亚洲乱码国产乱码精品精可以看| 国产欧美一区二区三区在线老狼| 精品国产人成亚洲区| 精品久久国产老人久久综合| 欧美精品一级二级三级| 欧美日韩一级二级三级| 欧美亚洲一区三区| 在线观看欧美精品| 欧美性xxxxxx少妇| 欧美日韩亚洲高清一区二区| 欧美日韩一区二区三区四区| 欧美亚日韩国产aⅴ精品中极品| 一本久久a久久精品亚洲| 色婷婷激情久久| 色噜噜夜夜夜综合网| 欧美日韩在线直播| 欧美日韩国产成人在线免费| 欧美视频在线观看一区| 欧美日韩国产不卡| 91精品国产色综合久久不卡蜜臀| 欧美一区二区视频免费观看| 欧美一级一级性生活免费录像| 3751色影院一区二区三区| 欧美一级在线视频| 久久蜜桃一区二区| 国产精品久久久久aaaa| 亚洲老妇xxxxxx| 水野朝阳av一区二区三区| 麻豆视频一区二区| 国产精品99久久久久久久女警 | 国产蜜臀97一区二区三区| 国产无人区一区二区三区| 中文字幕在线不卡视频| 亚洲中国最大av网站| 久久精品国产网站| 粉嫩蜜臀av国产精品网站| 色哟哟精品一区| 欧美一二三在线| 国产欧美精品一区二区色综合 | 欧美性生活一区| 欧美一级高清片| 国产精品伦理一区二区| 亚洲一区二区三区四区中文字幕| 天天影视涩香欲综合网| 高清不卡在线观看| 欧美色网站导航| 欧美激情一区三区| 午夜视频久久久久久| 丁香婷婷综合色啪| 日韩一区二区电影| 国产精品国产三级国产有无不卡| 五月婷婷久久丁香| 不卡的av电影在线观看| 日韩三级中文字幕| 成人欧美一区二区三区小说| 免费高清视频精品| 91福利精品视频| 中文字幕巨乱亚洲| 精品影院一区二区久久久| 在线观看av一区二区| 欧美激情一二三区| 国内精品在线播放| 91精品国产91综合久久蜜臀|