⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 arm(s3c440b)读写u盘源程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
	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 + -