📄 main.c.bak
字号:
U8 status;
if (!USB_Control.UDiskOK)
{
printf("请先插入移动盘\n");
return 0;
}
status=Getcapacity(&Total,&Free);
if(status==1)
{
printf("查询空间成功!\n");
printf("总空间:%dBYTE(%fM)\n",Total,(1.0*Total/(1024*1024)));
printf("空闲空间:%dBYTE(%fM)\n",Free,(1.0*Free/(1024*1024)));
}else{
printf("查询空间失败!\n");
}
return status;
}
int Fun_delfile(int argc,char *argv[])
{
char p[256],i;//,Status=0
U8 length;
if (!USB_Control.UDiskOK)
{
printf("请先插入移动盘\n");
return 0;
}
if(argc!=2)
{
printf("Bad Command.\n");
return 0;
}
////////////////////////////////////////////////////////
length=strlen(argv[1]);
if(length<13)
{
if(!GetShorFileForm(argv[1],p))
{
printf("文件字符格式错误!\n");
return FALSE;
}
}else
{
memcpy(p,argv[1],length);
for(i=0;i<length;i++)
{
if((p[i]>=97)&&(p[i]<=122))
{
p[i]=p[i]-32;
}
}
p[length]='\0';
}
///////////////////////////////////////
if(!Removefile(p))
{
printf("删除文件失败!\n");
return FALSE;
}
////////////////////////////////////////
printf("删除文件成功!\n");
return TRUE;
}
int Fun_deldir(int argc,char *argv[])
{
return 1;
}
int Fun_openfile(int argc,char *argv[])
{
char p[256],i;//,Status=0
U8 length;
if (!USB_Control.UDiskOK)
{
printf("请先插入移动盘\n");
return 0;
}
if(argc!=2)
{
printf("Bad Command.\n");
return 0;
}
////////////////////////////////////////////////////////
length=strlen(argv[1]);
if(length<13)
{
if(!GetShorFileForm(argv[1],p))
{
printf("文件字符格式错误!\n");
return FALSE;
}
}else
{
memcpy(p,argv[1],length);
for(i=0;i<length;i++)
{
if((p[i]>=97)&&(p[i]<=122))
{
p[i]=p[i]-32;
}
}
p[length]='\0';
}
///////////////////////////////////////
if(!OpenFile(p))
{
printf("文件打开失败!\n");
return FALSE;
}
printf("打开文件成功!指针已经指向文件的最后一个字节\n");
printf("读文件要用(setptr+指针+0)重新设置读位置\n");
printf("写文件可以直接进行,也可以重新用(setptr+指针+1)设置位置\n");
return TRUE;
}
int Fun_writefile(int argc,char *argv[])
{
char cData[65536];
U32 dLength;
if(argc!=2)
{
printf("Bad command\n");
}
dLength=strtodec(argv[1],strlen(argv[1]));
memset(cData,49,dLength);
if(!Writefile(cData,dLength,0))//标记不同,0,表示不更新目录,还要继续写入
{
printf("写文件失败!\n");
return FALSE;
}
//连速两次
if(!Writefile(cData,dLength,1))//写文件结束更新目录
{
printf("写文件失败!\n");
return FALSE;
}
printf("写文件成功!已经写入2x%d的数据\n",dLength);
return TRUE;
}
int Fun_setptr(int argc,char *argv[])
{
U32 dLength;
U8 bFlag;
if(argc!=3)
{
printf("Bad command\n");
}
dLength=strtodec(argv[1],strlen(argv[1]));
bFlag=strtodec(argv[2],strlen(argv[2]));
if((bFlag!=1)&&(bFlag!=0))
{
printf("标注符号输入错误,只能为1或0\n");
return FALSE;
}
if(!SetfilePointer(dLength,bFlag))
{
printf("指针设置失败!\n");
return FALSE;
}
if(bFlag)
{
printf("指针设置成功!将从字节偏移量为%d的地方对文件进行写操作\n",dLength);
printf("输入写命令 writefile+字节数\n");
}
else{
printf("指针设置成功!将从字节偏移量为%d的地方对文件进行读操作\n",dLength);
printf("输入读命令 readfile+字节数\n");
}
return TRUE;
}
int Fun_getptr(int argc,char *argv[])
{
//////////////////////////////////////////////////
if(!GetfilePointer())
{
printf("获取指针失败!");
}
// printf("获取指针成功!");
return TRUE;
}
int Fun_readfile(int argc,char *argv[])
{
char cData[65536],*p;
U32 dLength;
U16 i;
p=cData;
if(argc!=2)
{
printf("Bad command\n");
}
dLength=strtodec(argv[1],strlen(argv[1]));
if(dLength>65536)
{
printf("超出了最大读取长度!\n");
return FALSE;
}
if(!Readfile(p,dLength))
{
printf("读文件失败!\n");
return FALSE;
}
*(p+dLength)='\0';
printf("读文件成功!数据长度为%d\n",dLength);
for(i=0;i<dLength;i++)
{
printf("%c,",*(p+i));
if(((i+1)%20==0))
printf("\n");
}
printf("\n");
return TRUE;
}
/////////////////////////////////////////////////////////
//---------------------------------------------------------------------------------//
int Help(int argc,char *argv[]);
typedef int (*cmdproc)(int argc,char *argv[]);
typedef struct {
char *cmd;
char *hlp;
cmdproc proc;
}CMD_STRUC;
CMD_STRUC CMD_INNER[] =
{
{"help", "show help", Help},
{"?", "= help", Help},
{"date", "show or set current date", GetDate},
{"time", "show or set current time", GetTime},
{"crtfile","Create a new file with the name specified",Fun_createfile},
{"crtdir","create a new dir with the name specified",Fun_createdir},
{"cd","Open dir",Fun_opendir},
{"dir","list all the dir and file in current dir",Fun_listdir},
{"updir","back to the privous dir",Fun_updir},
{"rootdir","back to the root dir",Fun_rootdir},
{"getcap","Get the capacity of the disk",Fun_getcap},
{"delfile","Delete the file with the name specified",Fun_delfile},
{"deldir","Delete the dir with the name specified",Fun_deldir},
{"openfile","Open the file with name specified",Fun_openfile},
{"writefile","Write data to the file with the name specified",Fun_writefile},
{"readfile","Read data from the file with the name specified",Fun_readfile},
{"setptr","Set the pointer of file to be read or write",Fun_setptr},
{"getptr","Get the pointer of file being read or written",Fun_getptr},
{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)
{
puts(CMD_INNER[i].cmd);
puts(" ------ ");
puts(CMD_INNER[i].hlp);
putch('\n');
}
}
return 0;
}
//---------------------------------------------------------------------------------//
static void ParseArgs(char *cmdline, U16 *argc, char **argv)
{
#define STATE_WHITESPACE 0
#define STATE_WORD 1
char *c;
U16 state = STATE_WHITESPACE;
U16 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 S8 GetCmdMatche(char *cmdline)
{
U16 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 S8 ParseCmd(char *cmdline, U8 cmd_len)
{
U16 argc;
S8 num_commands;
char *argv[MAX_ARGS];
ParseArgs(cmdline, &argc, argv);
// only whitespace
if(argc == 0)
{
return -1;
}
////////////////////////////////////////////////
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 1;
}
//---------------------------------------------------------------------------------//
void Main(void)
//#pragma import(__use_no_semihosting_swi)
{
U16 i,key;
char command[MAX_CMD_LEN];
S8 temp;
flag=0;
PortInit();
ChangePllValue(24, 6, 1); //修改系统主频为2倍频
//ChangePllValue(8, 6, 1);
console_init(115200);
Isr_Init();
printf("\f"); //清屏并换页
next_line();
// puts(table_begin);
puts("----------------------USB-HOST演示---------------------\n");
ShowSysClock(0, NULL);
printf("----------Serial Baud rate is %d\n", SERIAL_BAUD);
puts("----------Build date:");
puts(__DATE__);
putch('-');
puts(__TIME__);
next_line();
puts(table_begin);
/////////////////////////////////////////////////////////////////
SysTime.year = 4;
SysTime.month = 9;
SysTime.day = 23;
SysTime.weekday = 4;
SysTime.hour = 0x17;
SysTime.min = 0x09;
SysTime.sec = 0;
RtcSetDay(&SysTime);
RtcSetTime(&SysTime);
puts("\n");
puts("----------System Initialized.\n");
/////////////////////////////////////////////////////////////////
Led_Display(0,0);
for(i=0;i<4;i++)
{
Led_Display(i,1);
Delay(1000000);
Led_Display(i,0);
Delay(1000000);
}
temp=SL811_GetRev();
if( temp==0x20 )
puts("----------Find SL811HS, chip id = 0x20\n");
sl811h_init();
prompt();
i=0;
while(1)
{
check_usbdevice();
// check for uart
if(kbhit())
{
key = getkey();
if(key == BACK_KEY)
{
if(i)
{
putch(key);
putch(' ');
putch(key);
}
i -= i?1:0;
}
else if(key == ENTER_KEY)
{
int tmp;
command[i] = 0;
putch('\n');
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);
}
}
}
}// end while
}
U32 pIrqStart, pIrqFinish, pIrqHandler;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -