📄 shell.c
字号:
for(j=0; j<16; j++)
{
//ch = ((unsigned char *)tmp_data)[(i<<4)+j];
ch = ((U8 *)src)[(i<<4)+j];
putch((ch>=0x20&&ch<0x80)?ch:'.');
}
putch('\n');
}
} while(getch()!=ESC_KEY);
//关闭cache后读tmp_data并打印才正常
return 0;
}
#ifdef SAVE_ENV_SUPPORT
int SaveEnv(int argc, char*argv[])
{
int i=0,argcRun;
char *argvRun[3];
U32 addr;
char temp[2][10];
argcRun=4;
addr=(U32)&Env;
ultostr((char *)temp[0],addr);
ultostr((char *)temp[1],sizeof(Env));
argvRun[1] = "armsys7";
argvRun[2] = temp[0];
argvRun[3] = temp[1];
//printf("argvRun[2]=%x.\n",addr);
//printf("argvRun[1]=%s.\n",argvRun[1]);
//printf("argvRun[2]=%s.\n",argvRun[2]);
//printf("argvRun[3]=%s.\n",argvRun[3]);
i=NandProg(argcRun,argvRun);
if(i == 0)
puts("Save the system setting OK!!!\n");
else
puts("Don't save the system setting!!\n");
return 0;
}
int LoadEnv()
{
int i=0,argcRun;
char *argvRun[3];
U32 addr;
char temp[1][10];
addr=(U32)&Env;
ultostr((char *)temp[0],addr);
argcRun=3;
argvRun[1] = "armsys7";
argvRun[2] = temp[0];
i=NandLoad(argcRun,argvRun);
if(i != 0)
printf("\nNot find system setting file!!!\n");
if(Strncmp((const char *)Env.flag, "params", 7))
return 1;
SetSysClockPara(Env.clk_para);
for(i=0; BaudSet[i]; i++)
if(Env.baud==BaudSet[i])
break;
if(!BaudSet[i])
Env.baud = DEFAULT_SERIAL_BAUD;
SerialSwitch(Env.current_uart);
SerialChgBaud(Env.baud);
if(Env.prog_s_addr&0x3)
Env.prog_s_addr = SIZE_64K;
if(Env.prog_r_addr&0x3)
Env.prog_r_addr = DFT_DOWNLOAD_ADDR;
download_addr= DFT_DOWNLOAD_ADDR;
Env.boot_params[255] = 0;
return 0;
}
#endif //SAVE_ENV_SUPPORT
void DftEnvInit(void) //对系统参数赋初值
{
Memset(&Env, 0, sizeof(Env));
Memcpy(Env.flag, "params", 8);
Env.nic_cfg.ip = DEFAULT_IP_ADDR;
Env.nic_cfg.mask = DEFAULT_IP_MASK;
Env.nic_cfg.gate = DEFAULT_IP_GATE;
Env.baud = DEFAULT_SERIAL_BAUD;
Env.current_uart = DEFAULT_SERIAL_PORT;
GetSysClockPara(Env.clk_para);
Env.prog_s_addr = SIZE_64K;
Env.prog_r_addr = DFT_DOWNLOAD_ADDR;
Env.saved_in = 0;
SerialSwitch(Env.current_uart);
SerialChgBaud(Env.baud);
download_addr= DFT_DOWNLOAD_ADDR;
}
#ifdef SERIAL_PORTS_SWITCH
int ChgUartPort(int argc, char *argv[])
{
Env.current_uart = !Env.current_uart;
printf("Set uart port%d...\n", Env.current_uart?1:0);
SerialSwitch(Env.current_uart);
return 0;
}
#endif //SERIAL_PORTS_SWITCH
#ifdef NAND_FLASH_SUPPORT //对NAND-FLASH的操作,用FAT16
int NandProg(int argc, char *argv[])
{
unsigned int size = ~0;
unsigned int data_begin = ~0;
int handle,i;
char dir[]="\\code\\";
char *buff,*str;
data_begin = download_addr;
size = download_len;
str = argv[1];
if(argc==2 && str[0] == '?')
{
puts("Example 1 : nfw file_name \n");
puts("Example 2 : nfw file_name source_address size_bytes \n");
return 0;
}
if(argc<2)
{
printf("You must input the file name!!\n");
printf("Usage: \\>nfw file_name from_addr file_size\n");
return -1;
}
str = strcat(dir,argv[1]);
if(argc>2)
data_begin = strtoul((char *)argv[2]);
if(argc>3)
size = strtoul((char *)argv[3]);
if((size==-1)||(data_begin==-1))
{
printf("Arguments error\n");
return -1;
}
if(size==0)
{
printf("Write 0 Bytes!\n");
return -1;
}
else
{
printf("The file size is 0x%x bytes. Datas from the address 0x%x.\n",size,data_begin);
handle=Fat_open(str);
if((handle!=-1)&&(handle!=-2))
{
i=Fat_close(handle);
printf("The same file in directory will be deleted!\nAre you sure?");
if(!getyorn())
return -1;
i=Fat_remove(str);
}
handle = Fat_creat(str, 0x27);//0x27:txt file?
printf("fat_creat's file handle=%d\n",handle);
if(handle==0)
{
printf("Begin Write the '%s' to Nand-Flash,please Waiting...\n",str);
buff=(char *)data_begin;
i=Fat_write(handle, (char *)buff, size);
printf("fat_write's file handle=0x%xbyte\n",i);
i=Fat_lseek(handle, 0, SEEK_SET);
i=Fat_close(handle);
}
i=Fat_open(str);
printf("fat_open's result=%d\n",i);
i=Fat_close(i);
if(i==0)
printf("Finished writing!\n" );
else
printf("Err:Writing file!\n" );
}
return 0;
}
#endif
#ifdef NAND_FLASH_SUPPORT
int NandLoad(int argc, char *argv[])
{
//NAND_FLASH_SUPPORT
int handle,i;
char *buff,*str,*stru;
char dir[]="\\code\\";
download_addr =DFT_DOWNLOAD_ADDR;
str = argv[1];
if(argc == 2 && str[0] == '?')
{
puts("Example 1 : nfr file_name \n");
puts("Example 2 : nfr file_name destination_address run \n");
return 0;
}
if(argc<2)
{
printf("You must input the file name!!\n");
return -1;
}
str = strcat(dir,argv[1]);
if(argc>2)
{
download_addr = strtoul((char *)argv[2]);
if(download_addr==-1)
download_addr = DFT_DOWNLOAD_ADDR;
}
stru=argv[3];
handle=Fat_open(str);
//printf("fat_open's result=%d\n",handle);
if((handle==(-1))||(handle==(-2)))
{
printf("Err:Not find the '%s' !!!\n",str);
return -1;
}
else
{
printf("Open the '%s' from nand flash to 0x%x\n",str, download_addr);
buff=(char *)download_addr;
i=Fat_read(handle, buff, 0x5f0000); //max read size 4Mbyte
printf("fat_read's result=0x%xbyte\n",i);
i=Fat_close(handle);
if(i==0)
printf("Complete read,You will run the code from 0x%x!\n",download_addr);
else
printf("Err:Load the datas fail!!!\n");
//Delay(5000);//it should be delay a long time for pc software stable
//printf("xxxxxxxxxx\n");
Delay(1000);
//printf("xxxxxxxxxx\n");
//Delay(5000);
//printf("xxxxxxxxxx\n");
if(stru[0]=='r')
//{
// printf("here1");
((void (*)(void))download_addr)();
//}
//else
//printf("here2");
}
return 0;
}
#endif
int NandFileDel(int argc, char *argv[])
{
int handle,i;
char dir[]="\\code\\";
char *str;
str = argv[1];
if(argc == 2 && str[0] == '?')
{
puts("Example : nfdel filename \n");
return 0;
}
if(argc<2)
{
printf("You must input the file name!!\n");
printf("Usage: \\>nfw file_name \n");
return -1;
}
str = strcat(dir,argv[1]);
handle=Fat_open(str);
printf("fat_open's result=%d\n",handle);
if((handle==(-1))||(handle==(-2)))
{
printf("Err:Not find the '%s' !!!\n",str);
return -1;
}
else
{
i=Fat_close(handle);
printf("The '%s' file will be deleted! Are you sure?",argv[1]);
if(!getyorn())
return -1;
i=Fat_remove(str);
if(i==0)
printf("The '%s' file was deleted!\n",argv[1]);
else
printf("The '%s' file Not deleted!\n",argv[1]);
}
return 0;
}
int NandErase(int argc, char *argv[])
{
U32 NFsize_M;
NFsize_M =(NandFlashSize>>20);
printf("\nThe format NandFlash size is %dMByte!\n",NFsize_M);
printf("The datas in Nandflash will be lost, are you sure?");
if(!getyorn())
return -1;
if(NFsize_M==16 || NFsize_M==32 || NFsize_M==64 || NFsize_M==128)
Fat_Format(NAND_FLASH_Drv,NFsize_M,PART_TYPE_FAT16); //0x06 是BIGDOS FAT16分区代码
else
printf("\nNo supported Nand Flash Found!\n");
return 0;
}
int NandShow(int argc, char*argv[])
{
FatInit(1);
Fat16_Nandflash_test();
return 0;
}
//#endif //NAND_FLASH_SUPPORT
#define MAX_DOWNLOAD_SIZE 0x200000
#ifdef XMODEM_DOWNLOAD_SUPPORT
int XmodemReceive(int argc, char *argv[])
{
char *str;
str = argv[1];
if(argc==2 && str[0] == '?')
{
puts("Default download address : xmload \n");
puts("Set new download address : xmload destination_address \n");
return 0;
}
if(argc<2)
download_addr = DFT_DOWNLOAD_ADDR;
else
{
unsigned long tmp;
tmp = strtoul((char*)argv[1]);
download_addr = (tmp==-1)?download_addr:tmp;
}
printf("Now download file by xmodem to 0x%x...\n", download_addr);
download_len = XModemReceive((char *)download_addr, MAX_DOWNLOAD_SIZE);
if(download_len!=-1)
printf("\nReceived %u[0x%x] bytes success\n", download_len,download_len);
return download_len;
}
int XmodemReceiveRun(int argc, char *argv[])
{
if(XmodemReceive(argc, argv)!=-1)
{
RunProgram(0, NULL);
}
return 0;
}
#endif //XMODEM_DOWNLOAD_SUPPORT
int showoem(int argc, char *argv[])
{
ShowBootInfo();
puts("公司名称 :杭州立宇泰电子有限公司\n");
puts("公司网址 :www.hzlitai.com.cn \n");
puts("联系地址 :杭州市登云路639号杭州电子市场2B166号\n");
puts("联系电话 :86-0571-89902166 \n");
puts("电子邮箱 :lyt_office@yahoo.com.cn \n");
puts("技术交流 :86-0571-88331446 \n");
puts("交流邮箱 :lyt_tech@yahoo.com.cn \n");
return 0;
}
int run_uclinux(int argc, char *argv[])
{
int i=0,argcRun;
char *argvRun[3];
printf("\nLoad image.rom...\n");
src_addr=0x30000;
des_addr=0xc100000;
if(0xa0==*(unsigned char *)(src_addr+2))
{
for(i=0;i<0x180000;i++)
*(unsigned char *)des_addr++ = *(unsigned char *)src_addr++;
printf("\nStart uClinux\n");
//ram_addr=0xc100000;
((void (*)(void))ram_addr)();
}
else
{
argcRun=4;
argvRun[1]="uclinux";
argvRun[2]="c100000";
argvRun[3]="r";
i=NandLoad(argcRun,argvRun);
if(i != 0)
printf("\nNot find uClinux progrom!!!\n");
}
return 0;
}
int boardtest(int argc, char *argv[])
{
int i=0,argcRun;
char *argvRun[3];
printf("\nLoading ARMSYS7_TEST Program...\n");
src_addr=0x010000;
des_addr=0xc100000;
if(0x3c==*(unsigned char *)src_addr)
{
for(i=0;i<0x20000;i++)
*(unsigned char *)des_addr++ = *(unsigned char *)src_addr++;
printf("\nStart Boardtesting...\n");
printf("\n");
//ram_addr=0xc100000;
((void (*)(void))ram_addr)();
}
else
{
argcRun=4;
argvRun[1]="systest";
argvRun[2]="c100000";
argvRun[3]="r";
i=NandLoad(argcRun,argvRun);
if(i != 0 )
printf("\nNot find ARMSYS7_TEST program!!!\n");
}
return 0;
}
/******************************************************************************
【功能说明】默认系统设置,设置系统主频、IP地址、波特率、启动参数等
******************************************************************************/
int Default_Setting(int argc, char *argv[])
{
unsigned short m ;
char c[] = "root=/dev/rom0 console=ttyS0,115200 devfs=mount" ;
Env.clk_para[0] = 56 ; //设置默认系统时钟
Env.clk_para[1] = 2 ;
Env.clk_para[2] = 1 ;
Env.clk_para[3] = 64000000 ;
rPLLCON = (56 << 12) | (2<< 4) | 1 ;
Delay(50);
TimerInit(TIMER_FREQ);
SerialChgBaud(115200); //设置串口默认波特率
Delay(10);
Env.nic_cfg.ip = ((192)<<24) | ((168)<<16) | ((253)<<8) | (2) ; //设置默认IP地址
Env.nic_cfg.mask = ((255)<<24) | ((255)<<16) | ((255)<<8) | (0) ;
Env.nic_cfg.gate = ((192)<<24) | ((168)<<16) | ((253)<<8) | (1) ;
Env.prog_r_addr = 0xc100000 ;
Env.prog_s_addr = 0x10000 ;
m = 0 ;
while( c[m] != 0 )
{
Env.boot_params[m] = c[m] ;
m++ ;
}
Env.boot_params[ m + 1 ] = 0 ;
return 0;
}
//*****************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -