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

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

?? shell.c

?? arm9.rar
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "config.h"
#include "board.h"
#include "utils.h"
#include "shell.h"

void SetParams(void);

static unsigned int BaudSet[] = {4800, 9600, 19200, 38400, 57600, 115200, 0};

static EnvParams Env;

extern U32 NandFlashSize;
struct Partition *pNandPart = Env.NandPartition;

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

CMD_STRUC CMD_INNER[] = {
				 	{"help", "show this list", Help},
					{"?", "= help", Help},
#ifdef	RTC_TIMER_SUPPORT
					{"date", "show or set current date", GetDate},
					{"time", "show or set current time", GetTime},
					{"setweek", "set weekday", SetWeek},
#endif					
					{"clock", "show system running clock", ShowSysClock},
#ifdef	SET_SYSCLK_SUPPORT
					{"setmclk", "set system running clock", ChgSysClk},
#endif
#ifdef	SERIAL_PORTS_SWITCH
					{"chguart", "change uart(0/1)", ChgUartPort},
#endif
					{"setbaud", "set baud rate", ChgBaudRate},
#ifdef	TFTP_DOWNLOAD_SUPPORT
					{"ipcfg", "show or set current IP address", SetIpAddr},
					{"netload", "download file by net", LoadFromNet},
					{"netrun", "download file by net and run", NetLoadRun},
					{"n", "download file by net and run", NetLoadRun},
#endif					
					{"comload", "download file by uart", LoadFromUart},
					{"comrun", "download file by uart and run", UartLoadRun},
#ifdef	XMODEM_DOWNLOAD_SUPPORT
					{"rx", "download file by xmodem", XmodemReceive},
					{"rxrun", "download file by xmodem and run", XmodemReceiveRun},
#endif
#ifdef	USB_DOWNLOAD_SUPPORT
					{"usbload", "download file by usb", UsbDownload},
					{"usbrun", "download file by usb and run", UsbDownloadRun},
					{"u", "download file by usb and run", UsbDownloadRun},
#endif
#ifdef	NOR_FLASH_SUPPORT
					{"prog", "program flash", ProgFlash},
					{"ap", "download file and program it to flash", AutoLoadAndProgFlash},
					{"backup", "move bios to the top of flash", BackupBios},
					{"copy", "copy flash from src to dst address", CopyFlash},					
					{"boot", "boot from flash", BootLoader},
#endif
					{"run", "run program", RunProgram},
					{"move", "move data from addr1 to addr2", MoveMem},
					{"mrun", "move data form prog_s_addr to prog_r_addr and run", MoveRun},
					{"md",	"show memory data", MemoryDisplay},
					{"memd", "show 8/16/32bits memory", MemoryShow},
					{"mems", "set 8/16/32bits memory", MemorySet},
#ifdef	SAVE_ENV_SUPPORT
					{"senv", "save enviroment value to flash", SaveEnv},
#endif
					{"machine", "set machine number", SetMachine},
					{"setpa", "set program save(run) address", SetProgAddr},
					{"setbp", "set program boot parameters", SetBootParams},
					{"bootkey", "set key to autoboot", SetBootKey},
					{"reset", "reset system", Reset_System },
#ifdef	NAND_FLASH_SUPPORT
					{"nfpart", "set nand flash partitions", NandPart},
					{"nferase", "erase nand flash partition", NandErase},
					{"nfprog", "program nand flash", NandProg},		
					{"nfload", "load program from nand flash", NandLoad},
#endif
					{"defset", "default setting for Linux", Default_Setting },
					{NULL, NULL, NULL}
				};




U32 download_addr;
U32 download_len;

#ifdef	RTC_TIMER_SUPPORT
TIME_STRUC SysTime;
char *WeekDay[7] = {"MON", "TUES", "WED", "THURS","FRI", "SAT", "SUN"};
#endif

/*
void cache_flush(void)
{
	unsigned int *pLRU, i;
		
	pLRU = (unsigned int *)0x10004000;
	for(i=0; i<(128<<2); i+=4)
		pLRU[i] = 0;
}*/


void GetBoardKey(void)
{
/*	unsigned int key;
	void (*fp)(void) =(void (*)(void))BIOS_LOAD;

	if((rPDATG&0xf0) != 0xf0)	
	{
		key = rPDATG&0xf0;
		Delay(500);		//延時若干個100us,消除抖動
		if(key == (rPDATG&0xf0))
		{
			while((rPDATG&0xf0) != 0xf0);
			printf("boot from flash...\n");
			(*fp)();							
		}
	}*/
	
	LedSet(~GetKeyStatus());
}

/*******************************************************************************************************/
void ShellIn(void)
{
	int i, j, key, led;
	int x;
	int h_i, h_j, h_jj;
	char t_command[MAX_CMD_LEN];
	char * command;		
	char H_command[MAX_CMD_HISTORY][MAX_CMD_LEN];
	
	printf("Machine Number is %d\n", Env.machine);
	printf("IP address : %u.%u.%u.%u\n", (Env.nic_cfg.ip>>24)&0xff, (Env.nic_cfg.ip>>16)&0xff, (Env.nic_cfg.ip>>8)&0xff, Env.nic_cfg.ip&0xff);
//	printf("IP MASK    : %u.%u.%u.%u\n", (Env.nic_cfg.mask>>24)&0xff, (Env.nic_cfg.mask>>16)&0xff, (Env.nic_cfg.mask>>8)&0xff, Env.nic_cfg.mask&0xff);
//	printf("IP GATE    : %u.%u.%u.%u\n", (Env.nic_cfg.gate>>24)&0xff, (Env.nic_cfg.gate>>16)&0xff, (Env.nic_cfg.gate>>8)&0xff, Env.nic_cfg.gate&0xff);
	printf("Serial baud : %d\n", Env.baud);
	printf("Program save in %s flash\n", (Env.saved_in&1)?"nand":"nor");
	printf("Program save address 0x%x\n", Env.prog_s_addr);
	if(Env.saved_in&2)
		printf("Initrd save address 0x%x\n", Env.initrd_addr);
	printf("Program run address 0x%x\n", Env.prog_r_addr);
	printf("Program boot params : %s\n", Env.boot_params);	
	
//	for(i=0; i<8; i++)
//		printf("%d, %x ,%x\n", i, Env.NandPartition[i].offset, Env.NandPartition[i].size);

	ShowSysClock(0, NULL);

#ifdef	RTC_TIMER_SUPPORT
	GetDate(0, NULL);
	GetTime(0, NULL);
#endif

	if((Env.boot_key>>16)==(('k'<<8)|'b')) {
		U8 key_stat, cnt, chk_loops, chk_key;
		
		chk_key = (Env.boot_key>>12)&3;
		printf("Set boot key is key%d, check state %s to boot\n", chk_key+1, (Env.boot_key&0x100)?"high":"low");
		
		chk_loops = 5;
		
		while(chk_loops--) {
			key_stat = (GetKeyStatus()>>chk_key)&1;
			for(cnt=30; cnt; cnt--) {
				Delay(1);
				if(key_stat!=((GetKeyStatus()>>chk_key)&1))
					break;
			}
			if(!cnt) {
				if(key_stat==((Env.boot_key>>8)&1)) {
					if(Env.boot_key&1)
						BootLoader(0, NULL);
					else
						MoveRun(0, NULL);
				}
				chk_loops = 0;
			}
		}
	}
	
	printf("\\>");
	i = 0;
	j = 0;
	h_i = 0;
	h_j = 0;
	h_jj = 0;
	for(x=0;x<MAX_CMD_HISTORY;x++)
		H_command[x][0] = '\0';
	command = H_command[0];
	
	led = 0;
	for(;;)
	{
		//GetBoardKey();
		
		if(WaitEventWithTimeout(kbhit, 1, 500))
		{
			led ^= 8;
			LedSet(led);
		}
		else
		{
			key = getkey();
			if(key == ENTER_KEY)
			{
				int tmp;
				putch('\n');

				memcpy(t_command, command, i+1);
				if(i)
				{
					memcpy(H_command[h_i], command, i+1);
					h_i++;
					h_i %= MAX_CMD_HISTORY;
					h_j = h_i;
					h_jj = 0;
					command = H_command[h_i];
					command[0] = '\0';
				}
				
				tmp = ParseCmd(t_command, i);
				//if(tmp<0)
				//	printf("Bad command\n");
				printf("\\>");
				
				i = 0;
				j = 0;
			}
			else if(key == BACK_KEY && j>0)
			{
				if(i==j)
				{
					i--;
					j--;
					printf("\b \b");
				}
				else
				{
					i--;
					j--;
					for(x=j;x<i;x++)
						command[x]=command[x+1];
					command[x] = ' ';
					printf("\b \b");
					for(x=j;x<i+1;x++)
						putch(command[x]);
					for(x=0;x<i+1-j;x++)
					{
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
				}
				command[i] = '\0';
			}
			else if(key == 0x1b)
			{
				key = getch();
				if(key != 0x5b) continue;
				
				key = getch();
				if(key == RIGHT_KEY)
				{	
					if(j==i) continue;
					putch(0x1b);
					putch(0x5b);
					putch(RIGHT_KEY);
					j++;
				}
				else if(key == LEFT_KEY)
				{
					if(j==0) continue;
					putch(0x1b);
					putch(0x5b);
					putch(LEFT_KEY);
					j--;
				}
				else if(key == HOME_KEY)
				{
					for(x=0;x<j;x++)
					{
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
					j = 0;
				}
				else if(key == END_KEY)
				{
					for(x=j;x<i;x++)
					{
						putch(0x1b);
						putch(0x5b);
						putch(RIGHT_KEY);
					}
					j = i;
				}
				else if(key == UP_KEY)
				{
					int cm_len;
					int tmp_hj;

					if(h_jj == MAX_CMD_HISTORY - 1)
					{
						putch(BEEP_KEY);
						continue;
					}
					tmp_hj = h_j;
					if(h_j==0) h_j = MAX_CMD_HISTORY - 1;
					else h_j--;
					
					cm_len = strlen(H_command[h_j]);
					if(cm_len == 0)
					{	
						putch(BEEP_KEY);
						h_j = tmp_hj;
						continue;
					}
					command = H_command[h_j];
					
					for(x=0;x<j;x++)
					{							//回到行首
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
					for(x=0;x<cm_len;x++)
						putch(command[x]);
					for(;x<i;x++)
						putch(' ');
					for(;x>cm_len;x--)
					{
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
					i = j = cm_len;
					h_jj++;
				}
				else if(key == DOWN_KEY)
				{
					int cm_len;

					if(h_jj == 0) 
					{
						putch(BEEP_KEY);
						continue;
					}				
					h_j ++;
					h_j %= MAX_CMD_HISTORY;
					
					cm_len = strlen(H_command[h_j]);
					command = H_command[h_j];
					
					for(x=0;x<j;x++)
					{							//回到行首
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
					for(x=0;x<cm_len;x++)
						putch(command[x]);
					for(;x<i;x++)
						putch(' ');
					for(;x>cm_len;x--)
					{
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
					i = j = cm_len;
					h_jj--;
				}
			}
			else if(key>=0x20 && key<=0x7e && i<(MAX_CMD_LEN-1))
			{
				if(i==j)
				{
					command[i++] = key;
					putch(key);
					j++;
				}
				else
				{
					for(x=i;x>j;x--)
						command[x] = command[x-1];
					command[j] = key;
					i++;
					for(x=j;x<i;x++)
						putch(command[x]);
					j++;
					for(x=0;x<i-j;x++)
					{
						putch(0x1b);
						putch(0x5b);
						putch(LEFT_KEY);
					}
				}
				command[i] = '\0';
			}
		}
	}	
}


/*******************************************************************************************************/
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) {
		printf("No '%s' command, please type 'help' or '?' for a command list\n", argv[0]);
		return -1;
	}
		
	if(CMD_INNER[num_commands].proc!=NULL)	
		CMD_INNER[num_commands].proc(argc, argv);
				
	return 0;			
}


/*******************************************************************************************************/
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
}


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


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

/*******************************************************************************************************/
int ShowSysClock(int argc, char *argv[])
{
	int i, j;
	SysClock clk[4];
	
	i = GetSysClock(clk);
	if(i>3) {
		puts("Get System Clock Fail\n");
		return -1;
	}
	for(j=0; j<i; j++)
		printf("%s clock is %dHz\n", clk[j].name, clk[j].freq);
	return 0;
}

/*******************************************************************************************************/
#ifdef	RTC_TIMER_SUPPORT

int GetTime(int argc, char *argv[])
{
	int i, error = 0;
	char *str;
	unsigned int hour, min, sec;
	
	RtcGetTime(&SysTime);
	printf("Current time is %2x:%2x:%2x\n", SysTime.hour, SysTime.min, SysTime.sec);
	
	if(argc>1) {
		str = argv[1];
		i = 0;
		if(str[++i]!=':')
			if(str[++i]!=':')
				error = 1;
		str[i] = 0;		
		hour = strtobcd(str);
		if(hour>0x23||error) {
			printf("hour error!\n");
			return -1;
		}
		
		str	+= i+1;
		i = 0;
		if(str[++i]!=':')
			if(str[++i]!=':')
				error = 1;
		str[i] = 0;
		min = strtobcd(str);
		if(min>0x59||error) {
			printf("minute error!\n");
			return -1;
		}
		
		str	+= i+1;
		i = 0;
		if(str[++i]!=0)
			if(str[++i]!=0)
				error = 1;
		str[i] = 0;
		sec = strtobcd(str);
		if(sec>0x59||error) {
			printf("second error!\n");
			return -1;
		}
		
		SysTime.hour = hour;
		SysTime.min  = min;
		SysTime.sec = sec;		
		RtcSetTime(&SysTime);

		printf("Set ");
		GetTime(0, NULL);
	}	
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av资源| 91免费版pro下载短视频| 日本午夜一本久久久综合| 亚洲国产aⅴ成人精品无吗| 亚洲精品免费在线观看| 亚洲女同一区二区| 日本免费新一区视频| 久久国产精品99久久久久久老狼| 韩国理伦片一区二区三区在线播放| 韩国一区二区视频| 不卡欧美aaaaa| 欧美视频在线一区二区三区| 日韩欧美精品在线视频| 国产精品久久久久一区二区三区 | 亚洲午夜久久久| 蜜桃视频在线一区| 99re8在线精品视频免费播放| 884aa四虎影成人精品一区| 久久人人爽爽爽人久久久| 亚洲精品视频在线观看网站| 蜜桃视频一区二区三区在线观看| 99re这里只有精品6| 精品国产污污免费网站入口 | 国产精品久线观看视频| 婷婷一区二区三区| 日本电影欧美片| 中文字幕免费观看一区| 韩国av一区二区三区在线观看| 日韩电影免费在线| 欧美中文字幕亚洲一区二区va在线 | 中文字幕精品—区二区四季| 麻豆精品久久精品色综合| 欧美日韩精品一区二区三区四区 | 99re66热这里只有精品3直播| 亚洲日本韩国一区| 国产精品一区二区免费不卡| 日韩三级精品电影久久久| 视频一区二区三区在线| 精品视频在线看| 日本美女一区二区| 日韩欧美中文字幕公布| 久久国产精品99精品国产| 欧美tickle裸体挠脚心vk| 国产精品亚洲第一| 亚洲欧美一区二区视频| 91农村精品一区二区在线| 亚洲精品成人a在线观看| 欧美又粗又大又爽| 欧美aa在线视频| 亚洲国产一区二区三区| 在线成人免费观看| 麻豆国产精品官网| 国产精品欧美一区二区三区| 欧洲生活片亚洲生活在线观看| 亚洲va欧美va人人爽午夜| 91精品综合久久久久久| 国产91精品精华液一区二区三区| 中文字幕一区日韩精品欧美| 在线成人午夜影院| 99视频精品全部免费在线| 午夜电影网亚洲视频| 国产精品美女一区二区| 欧美日韩国产美女| 94色蜜桃网一区二区三区| 久久精品国产精品青草| 一区二区三区免费在线观看| 久久亚洲欧美国产精品乐播| 91福利小视频| 99久久精品免费看| 国产精品亚洲午夜一区二区三区 | 国产毛片精品视频| 亚洲国产美国国产综合一区二区| 精品人伦一区二区色婷婷| 欧美三级在线视频| 97久久人人超碰| 99久久精品免费观看| 成人丝袜高跟foot| 成人永久免费视频| 国产一区二区三区免费看| 成人久久18免费网站麻豆 | 这里是久久伊人| 91在线精品秘密一区二区| 不卡高清视频专区| 成人精品国产一区二区4080 | 精品欧美一区二区在线观看| 亚洲人一二三区| 一区二区三区中文字幕精品精品| 中文字幕一区二区三区在线观看| 久久久久国产精品麻豆ai换脸 | 精品国产3级a| 亚洲视频网在线直播| 亚洲综合丁香婷婷六月香| 亚洲图片自拍偷拍| 国产一区二区伦理片| 成人免费三级在线| 欧美日韩小视频| 久久亚洲一区二区三区四区| 欧美激情中文字幕| 日韩激情在线观看| 成人av资源在线观看| 欧美亚洲综合另类| 久久久五月婷婷| 一区二区在线观看视频在线观看| 亚洲一区二区三区四区不卡| 免费在线一区观看| 欧日韩精品视频| 另类人妖一区二区av| 91免费版pro下载短视频| 日韩一区二区三区电影在线观看 | 91色乱码一区二区三区| 日韩美女视频在线| 性感美女久久精品| 91看片淫黄大片一级在线观看| 欧美电视剧免费全集观看| 亚洲午夜精品17c| 97精品超碰一区二区三区| 国产精品久久久久婷婷| 久久精品99国产精品日本| 色婷婷香蕉在线一区二区| 国产精品伦理在线| 韩国理伦片一区二区三区在线播放 | 蜜臀国产一区二区三区在线播放| 日本二三区不卡| 亚洲与欧洲av电影| 欧美视频一区二区在线观看| 亚洲乱码日产精品bd| 99久久婷婷国产| 欧美一区二区在线视频| 亚洲国产综合人成综合网站| 91麻豆国产香蕉久久精品| 亚洲日本一区二区| 91天堂素人约啪| 一区二区三区日韩欧美精品| 91成人免费网站| 日韩高清不卡一区二区三区| 91精品国产综合久久香蕉麻豆| 日韩av中文字幕一区二区 | 久久99在线观看| 久久蜜臀中文字幕| 99精品视频一区二区三区| 亚洲乱码国产乱码精品精98午夜| 欧美性做爰猛烈叫床潮| 免费看欧美女人艹b| 日本一区免费视频| 日本道精品一区二区三区| 日本中文字幕一区二区有限公司| 国产精品久久久久影院老司 | 麻豆一区二区三区| 中文字幕亚洲成人| 欧美一级高清片在线观看| 精品一区中文字幕| 亚洲一二三四区不卡| 久久中文字幕电影| 777午夜精品视频在线播放| 成人看片黄a免费看在线| 视频一区中文字幕国产| 成人免费在线视频| 精品电影一区二区三区| 欧美日韩不卡视频| 91麻豆精品一区二区三区| 国产美女精品在线| 蜜乳av一区二区三区| 视频一区免费在线观看| 一区二区三区美女| 亚洲欧洲色图综合| 综合欧美亚洲日本| 日本一区二区三区在线观看| 日韩欧美第一区| 欧美一区二区三区在线| 欧美视频一区二区| 欧美日韩免费电影| 日韩欧美一级精品久久| 9191久久久久久久久久久| 欧美久久一区二区| 91精品在线免费观看| 制服视频三区第一页精品| 777午夜精品视频在线播放| 7777女厕盗摄久久久| 欧美一区二区精品久久911| 亚洲欧美日韩国产一区二区三区| 精品国产伦一区二区三区观看方式| 欧美一区二区三区四区视频 | 美国av一区二区| 国产成人av电影免费在线观看| 国产成人午夜电影网| 成人app软件下载大全免费| 99久久综合99久久综合网站| 色婷婷久久99综合精品jk白丝| 欧美性感一类影片在线播放| 91精品国产综合久久精品| 国产亚洲污的网站| 亚洲在线视频网站| 国产一区二区在线影院| 91天堂素人约啪| 久久蜜桃一区二区| 亚洲成人资源在线| 91蜜桃传媒精品久久久一区二区| 777午夜精品视频在线播放| 国产精品热久久久久夜色精品三区 | 国产精品99久久久久久似苏梦涵|