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

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

?? shell.c

?? ARM7S3C44B0開發板BIOS
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include "../inc/def.h"
#include "../inc/44b.h"
#include "../inc/44blib.h"
#include "../inc/rtc.h"
#include "../inc/shell.h"
#include "../inc/flash.h"
#include "../net/armnet.h"
#include "../inc/option.h"
#include "../inc/nand.h"

#define	__ROM_BASE	0x00000000
#define	__ROM_SIZE	0x00200000
#define	DRAM_BASE	0x0c000000
#define	DRAM_SIZE	0x00800000
#define	BOOT_PARAMS_ADDR	(DRAM_BASE+0x100)
#define	BIOS_BASE	(__ROM_SIZE-0x10000)
#define	BIOS_LOAD	(__ROM_SIZE-2*SECTOR_SIZE-4)
#define ENV_ADD		(SECTOR_SIZE-0x100)
#define WAIT_TIME	0xf00000

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

struct Partition{
	U32 offset;
	U32 size;
	char *name;
};
extern struct Partition NandPartition[];
extern U32 NandFlashSize;

typedef struct {
	unsigned char flag[8];
	struct {
		unsigned long ip;
		unsigned long mask;
		unsigned long gate;
	}nic_cfg;
	unsigned long baud;	
	unsigned long sys_clk;
	unsigned long prog_s_addr;
	unsigned long prog_r_addr;
	struct Partition NandPartition[8];
	unsigned char boot_params[256];
}EnvParams;

extern void NetSever(void);

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},
					{"date", "show or set current date", GetDate},
					{"time", "show or set current time", GetTime},
					{"setweek", "set weekday", SetWeek},
					{"clock", "show system running clock", SysClock},
					{"setmclk", "set system running clock", ChgSysMclk},
					{"setbaud", "set baud rate", ChgBaudRate},
					{"ipcfg", "show or set IP address", SetIpAddr},
					{"netload", "download file by net", LoadFromNet},
					{"netrun", "load codes from NET port and run the codes", Net_Load_Run},
					{"comload", "download file by uart", LoadFromUart},
					{"comrun", "load codes from serial port and run the codes", Uart_Load_Run},
					{"prog", "program flash", ProgFlash},
					{"ap", "download file and program it to flash", APP_Auto_Prog_Flash},
					{"copy", "copy flash from src to dst address", CopyFlash},
					{"move", "move program from flash to sdram", Flash2Mem},
					{"run", "run from sdram", RunProgram},
					{"mrun", "move program stored in prog_s_addr to prog_r_addr and run", MoveRun},
					{"boot", "boot from flash", BootLoader},
					{"backup", "move bios to the top of flash", BackupBios},
					{"md",	"show memory data", MemoryDisplay},
					{"memd", "show 8/16/32bits memory", MemoryShow},
					{"mems", "set 8/16/32bits memory", MemorySet},
					{"senv", "save enviroment value to flash", SaveEnv},
					{"lenv", "load enviroment value from flash", LoadEnv},
					{"setpa", "set program save(run) address", SetProgAddr},
					{"setbp", "set program boot parameters", SetBootParams},
					{"nfprog", "program nand flash", NandProg},					
					{"nfload", "load program from nand flash", NandLoad},
					{"nferase", "erase nand flash partition", NandErase},
					{"nfpart", "set nand flash partitions", NandPart},
					{NULL, NULL, NULL}
				};

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

extern int MCLK;
extern NODE locnode;
extern unsigned int IP_ADDRESS;
extern unsigned int GATE_ADDRESS;
extern unsigned int MASK_ADDRESS;
extern unsigned int SERIAL_BAUD;
extern unsigned char MCLK_M;
extern unsigned char MCLK_P;
extern unsigned char MCLK_S;
extern unsigned long prog_s_addr;
extern unsigned long prog_r_addr;
extern unsigned int download_addr;
extern unsigned int download_begin;
extern unsigned int download_end;
extern unsigned int download_len;

int ip[4];

unsigned int strtoul(unsigned char *s)
{
	unsigned long ret;
	int i;

	ret = 0;

	while (*s != '\0') {
		if (*s >= '0' && *s <= '9')
			i = *s - '0';
		else if (*s >= 'a' && *s <= 'f')
			i = *s - 'a' + 0xa;
		else if (*s >= 'A' && *s <= 'F')
			i = *s - 'A' + 0xa;
		else
			return -1;
		ret = (ret << 4) + i;
		s++;
	}

	return ret;
}


void ultostr(unsigned char *s, unsigned int data)
{
	int i;
	
	s[8] = 0;
	for(i=7; i>=0; i--, data >>=4)
	{
		if((data&0xf)<=9)
			s[i] = (data&0xf)+'0';
		else
			s[i] = (data&0xf)+'a'-0x0a;
	}	
}


unsigned int strtobcd(char *s)
{
	unsigned long ret;
	int i;

	ret = 0;

	while (*s != '\0') {
		if (*s >= '0' && *s <= '9')
			i = *s - '0';		
		else
			return -1;
		ret = (ret << 4) + i;
		s++;
	}

	return ret;
}

unsigned int strtodec(char *str, int cnt)
{
	unsigned long i, data = 0;	
	
	for(i=0; i<cnt; i++)
	{
		data *= 10;
		if(str[i]<'0'||str[i]>'9')
			return -1;
		data += str[i]-'0';			
	}	
	return data;
}

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);
			Uart_Printf("boot from flash...\n");
			(*fp)();							
		}
	}
}

/*******************************************************************************************************/
void ShellIn(void)
{
	int i, j, key;
	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];

	SysClock(0, NULL);
	GetDate(0, NULL);
	GetTime(0, NULL);
	
//	LoadEnv(0, NULL);
	
	Uart_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];
	
	for(;;)
	{	
//		GetBoardKey();
		key = Uart_GetKey();
		
		if(key)
		{
			if(key == ENTER_KEY)
			{
				int tmp;
				Uart_SendByte('\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)
				//	Uart_Printf("Bad command\n");
				Uart_Printf("\\>");
				
				i = 0;
				j = 0;
			}
			else if(key == BACK_KEY && j>0)
			{
				if(i==j)
				{
					i--;
					j--;
					Uart_Printf("\b \b");
				}
				else
				{
					i--;
					j--;
					for(x=j;x<i;x++)
						command[x]=command[x+1];
					command[x] = ' ';
					Uart_Printf("\b \b");
					for(x=j;x<i+1;x++)
						Uart_SendByte(command[x]);
					for(x=0;x<i+1-j;x++)
					{
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(LEFT_KEY);
					}
				}
				command[i] = '\0';
			}
			else if(key == 0x1b)
			{
				key = Uart_Getch();
				if(key != 0x5b) continue;
				
				key = Uart_Getch();
				if(key == RIGHT_KEY)
				{	
					if(j==i) continue;
					Uart_SendByte(0x1b);
					Uart_SendByte(0x5b);
					Uart_SendByte(RIGHT_KEY);
					j++;
				}
				else if(key == LEFT_KEY)
				{
					if(j==0) continue;
					Uart_SendByte(0x1b);
					Uart_SendByte(0x5b);
					Uart_SendByte(LEFT_KEY);
					j--;
				}
				else if(key == HOME_KEY)
				{
					for(x=0;x<j;x++)
					{
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(LEFT_KEY);
					}
					j = 0;
				}
				else if(key == END_KEY)
				{
					for(x=j;x<i;x++)
					{
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(RIGHT_KEY);
					}
					j = i;
				}
				else if(key == UP_KEY)
				{
					int cm_len;
					int tmp_hj;

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

					if(h_jj == 0) 
					{
						Uart_SendByte(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++)
					{							//回到行首
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(LEFT_KEY);
					}
					for(x=0;x<cm_len;x++)
						Uart_SendByte(command[x]);
					for(;x<i;x++)
						Uart_SendByte(' ');
					for(;x>cm_len;x--)
					{
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(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;
					Uart_SendByte(key);
					j++;
				}
				else
				{
					for(x=i;x>j;x--)
						command[x] = command[x-1];
					command[j] = key;
					i++;
					for(x=j;x<i;x++)
						Uart_SendByte(command[x]);
					j++;
					for(x=0;x<i-j;x++)
					{
						Uart_SendByte(0x1b);
						Uart_SendByte(0x5b);
						Uart_SendByte(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) {
		Uart_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)
		{
			Uart_Printf("%-8s  ------  %s\n", CMD_INNER[i].cmd, CMD_INNER[i].hlp);
		}
	}
	
	return 0;
}


/*******************************************************************************************************/
int GetParameter(char *str, int cnt)
{
	int i, key;
	
	
	i = 0;
	while(1)
	{
		key = Uart_Getch();
		if(key)
		{
			if(key == ENTER_KEY)
			{
				str[i] = 0;
				return i;
			}
			else if(key == BACK_KEY && i>0)
			{
				i--;
				Uart_Printf("\b \b");
			}
			else if(key == 0x1b)
			{
				//Uart_Getch();
				//Uart_Getch();
				return -1;
			}
			else if(key>=0x20 && key<=0x7e && i<cnt)
			{
				str[i++] = key;
				Uart_SendByte(key);
			}				
		}
	}
	
}


/*******************************************************************************************************/
int SysClock(int argc, char *argv[])

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩中文字幕一区二区| 日韩精品一区二区三区在线播放 | 欧美美女直播网站| 久久影院电视剧免费观看| 亚洲黄色片在线观看| 国内精品在线播放| 欧美日韩夫妻久久| 亚洲欧洲国产日韩| 国产精品99久久久久久久女警| 在线精品国精品国产尤物884a| 国产亚洲欧洲997久久综合 | 波多野结衣中文字幕一区二区三区| 欧美性xxxxx极品少妇| 国产精品久久久久久久久免费相片 | 国产精品久久久久永久免费观看| 麻豆精品在线播放| 欧美老肥妇做.爰bbww| 一区二区三区高清| 91免费看片在线观看| 欧美国产精品专区| 国产91清纯白嫩初高中在线观看 | 欧美日韩一级黄| 亚洲欧美另类久久久精品2019| 国产宾馆实践打屁股91| xf在线a精品一区二区视频网站| 午夜精品福利一区二区三区蜜桃| 色婷婷综合激情| 亚洲精品福利视频网站| 91丨九色丨蝌蚪丨老版| 国产精品传媒视频| av成人免费在线| 日韩一区中文字幕| 91视频免费看| 亚洲影院在线观看| 精品视频在线免费看| 视频一区中文字幕| 欧美一区二区大片| 国产精品一区二区在线播放 | 亚洲在线观看免费视频| 91行情网站电视在线观看高清版| 亚洲男人的天堂av| 欧美在线观看18| 日韩中文字幕一区二区三区| 91精品国产高清一区二区三区| 日韩成人免费在线| 欧美tickling网站挠脚心| 国产在线观看一区二区| 国产日产欧美一区| 99精品一区二区三区| 亚洲一区二区三区小说| 欧美女孩性生活视频| 极品美女销魂一区二区三区 | 色婷婷综合五月| 午夜精品免费在线| 精品国产一区二区三区久久影院| 国产精品影音先锋| 亚洲日本电影在线| 91精品国产全国免费观看| 精品一区二区在线观看| 中文字幕在线不卡国产视频| 在线看一区二区| 激情小说亚洲一区| 夜夜嗨av一区二区三区| 精品国产一区二区亚洲人成毛片| caoporm超碰国产精品| 手机精品视频在线观看| 国产午夜精品一区二区三区视频| 日本丶国产丶欧美色综合| 美女久久久精品| 欧美国产乱子伦| 欧美一区三区二区| av一区二区不卡| 日本麻豆一区二区三区视频| 国产精品不卡在线| 欧美一级淫片007| 91免费看`日韩一区二区| 久久99久久久欧美国产| 一区二区三区中文在线| 久久久久九九视频| 制服丝袜国产精品| 色哟哟在线观看一区二区三区| 久久99精品一区二区三区三区| 亚洲天堂福利av| 久久久午夜精品理论片中文字幕| 欧美日韩国产综合一区二区三区| 国产成人av电影在线播放| 奇米一区二区三区| 一区二区三区在线播| 2014亚洲片线观看视频免费| 欧美久久久久免费| 色噜噜夜夜夜综合网| 懂色av一区二区在线播放| 秋霞午夜av一区二区三区| 亚洲在线中文字幕| 亚洲男人的天堂在线aⅴ视频| 亚洲国产精品传媒在线观看| 精品国产乱码久久久久久浪潮| 欧美日韩不卡一区| 欧洲视频一区二区| 99精品国产91久久久久久| 国产999精品久久| 国产黑丝在线一区二区三区| 日av在线不卡| 久久国产尿小便嘘嘘尿| 日韩一区精品视频| 日韩专区一卡二卡| 日韩电影在线免费看| 五月天婷婷综合| 五月婷婷欧美视频| 五月天网站亚洲| 视频一区在线播放| 蜜桃一区二区三区四区| 日韩av电影一区| 免费三级欧美电影| 麻豆91免费观看| 黄色资源网久久资源365| 精品在线播放午夜| 国产美女精品一区二区三区| 国产精品自拍一区| 丁香婷婷深情五月亚洲| av电影天堂一区二区在线观看| 99精品久久久久久| 91极品美女在线| 欧美日韩午夜在线| 欧美变态tickle挠乳网站| 亚洲精品在线三区| 欧美国产成人在线| 亚洲蜜桃精久久久久久久| 亚洲一区二区五区| 视频一区二区三区入口| 精品无人码麻豆乱码1区2区| 国产激情视频一区二区三区欧美 | kk眼镜猥琐国模调教系列一区二区| 成人国产精品免费网站| 91网页版在线| 欧美一区二区福利视频| 国产午夜精品在线观看| 亚洲精品精品亚洲| 日日摸夜夜添夜夜添国产精品| 国产剧情一区在线| 暴力调教一区二区三区| 欧美三级韩国三级日本一级| 日韩一二三区视频| 国产精品久久久久一区二区三区共| 亚洲综合网站在线观看| 久久国产精品第一页| 成人av资源网站| 欧美精品第1页| 国产视频一区在线播放| 亚洲在线观看免费| 国产一区二区调教| 在线欧美日韩国产| 久久久不卡影院| 亚洲444eee在线观看| 国产91在线看| 6080yy午夜一二三区久久| 日本一区二区三区dvd视频在线| 亚洲精品水蜜桃| 国产精品影视在线观看| 欧美三级一区二区| 亚洲欧洲一区二区在线播放| 免费日本视频一区| 一本到不卡免费一区二区| 欧美va天堂va视频va在线| 亚洲一区在线播放| 丁香激情综合五月| 日韩欧美综合在线| 亚洲伦在线观看| 国产不卡视频在线播放| 日韩美女在线视频| 亚洲va欧美va国产va天堂影院| 成人久久18免费网站麻豆| 91精品国产综合久久小美女| 亚洲精品日产精品乱码不卡| 国产精品18久久久久久久网站| 欧美精品亚洲一区二区在线播放| 成人欧美一区二区三区| 国产精品一卡二卡| 日韩精品资源二区在线| 日韩精品一二三| 色噜噜偷拍精品综合在线| 国产精品国产三级国产普通话99| 国产在线一区观看| 欧美成人精品高清在线播放| 天天av天天翘天天综合网色鬼国产 | 欧美一级夜夜爽| 亚洲国产精品精华液网站| 99久久国产综合色|国产精品| 久久夜色精品一区| 韩国一区二区在线观看| 欧美一级欧美一级在线播放| 亚洲va中文字幕| 欧美亚洲一区三区| 亚洲网友自拍偷拍| 在线观看91精品国产入口| 一卡二卡欧美日韩| 在线观看91精品国产入口| 一区二区欧美视频| 欧美性色黄大片| 天堂在线一区二区|