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

📄 main.c

📁 FAT16 读写的演示代码, 附文件说明
💻 C
字号:
/*
+FHDR------------------------------------------------------------------
Copyright (c),
Tony Yang –51,AVR,ARM firmware developer  
Contact:qq 292942278  e-mail:tony_yang123@sina.com.cn

Abstract:
$Id: main.C,v 1.12 2007/05/10 11:13:14 design Exp $
-FHDR-------------------------------------------------------------------
*/
#include "stdio.h"
#include "include\types.h"
#include "fat\fat.h"
#include "Flash_Management\Flash_Management.h" 
#include "include\FAT_cfg.h" 

/*
===============================================================================
函数
main();
入口:无
出口:无
===============================================================================
*/ 
FILE *file2;
void main(void)
{
  u32 cc,bb;
  u16 COUNT;
  u8 a,ATTR,j;
  u8 HANDLE1;   
  u8 buf[65535];
  u8 ddd[] = "c:\\ok\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAaaaaaaaaa.rar";

  flash_management_sysinit();
  FAT_filesystem_initialiation();
  volume_inquiry('c',&cc,&bb);
 
  printf("Volume Capacity: %ld\n",cc);
  printf("Volume FreeSpace: %ld\n",bb);
  scanf("%c",&a);

/*  建立一个目录CREATE_FOLDER_TEST,以测试建立目录函数create_floder()  */
  create_floder("aaaaaaaaaa");
  create_floder("aaaaaaaaaaA");
  create_floder("aaaaaaaaaaA");
  create_floder("aaaaaaaaaaAA");
  create_floder("C:\\AAAAAAAAAAAaaaaaa");
  create_floder("C:\\AAAAAAAAAAAaaaaaa");
  create_floder("CREATE_FOLDER_TEST");
  create_floder("CREATE_FOLDER_TEST");

                                                                                                                                  
  scanf("%c",&a);

/*  在目录CREATE_FOLDER_TEST下建立一个文件,以测试建立目录函数create_file()  */
 create_file("C:\\CREATE_FOLDER_TEST\\created_file.txt");
 create_file("C:\\CREATE_FOLDER_TEST\\created_file.txt");
 create_file("C:\\CREATE_FOLDER_TEST\\AAAAAAAAAAB");
 create_file("C:\\CREATE_FOLDER_TEST\\AAAAAAAAAAB");
 create_file("file.txt");
 a = open_file("file.txt");
 write_file(a,buf, 0x1000);write_file(a,buf, 0x1000);
 write_file(a,buf, 0x1000);write_file(a,buf, 0x1000);
 close_file(a);
/* 重命令文件CREATE_FOLDER_TEST\\created_file.txt为"DFDFDFDFDFDFDFDFSDFSDTONY.TXT"
   ,以测试重命名文件函数rename_file() */

 rename_file("C:\\CREATE_FOLDER_TEST\\created_file.txt","DFDFDFDFDFDFDFDFSDFSDTONY.TXT");
 scanf("%c",&a);	


 


/*  列举CREATE_FOLDER_TEST目录下面的所有文件,打印到屏幕  */
 cd_folder("CREATE_FOLDER_TEST",0);

   a = 0;
  while(folder_enumeration(buf,a,&ATTR) == SUCC)
  { 
     printf("\nreaded entry=%s Attr = %x",buf,ATTR);

     if(a == 0)
	   a = 1;
  }
scanf("%c",&a);	

 cd_folder(" ",1);

/*  列举根目录下面的所有文件,打印到屏幕  */

   a = 0;
  while(folder_enumeration(buf,a,&ATTR) == SUCC)
  { 
     printf("\nreaded entry=%s Attr = %x",buf,ATTR);

     if(a == 0)
	   a = 1;
  }
scanf("%c",&a);	  
//printf("create folder:OK a = %d",a);

 

 create_floder("OK");
/* OK目录下连续写文件,readed.rar,直到磁盘被写满 */ 

 j = 0;
 COUNT = 0;
 do{
 for(a = 0;a<25;a++)
 {
  COUNT++;	 
 if(create_file(ddd) == SUCC)
 {
   printf("Create file %s successfully\n",ddd);
   
 HANDLE1 = open_file(ddd);
if ((file2 = fopen("readed.rar","rb+")) == NULL)
     {
      return;
     }
	if(HANDLE1 != FAIL)
	{   
		   
		printf("\nOpen File %s successfully",ddd);
		do{
      printf("x");
     cc = fread(buf,1,40000,file2);  
	    write_file(HANDLE1,buf, cc);
		if(cc < 40000)
			break;
		}while(1);
		close_file(HANDLE1);
		fclose(file2);
	}

 }
 else
   printf("Create file %s failed\n",ddd);
 ddd[6+j] ++; 
 }
  j++;
 }while(j< 20);

/*  把磁盘内的所有文件分离出来  */
 
  a = 0;
  while(disk_enumeration(buf,a,&ATTR) == SUCC)
  { 
     printf("\nreaded entry=%s Attr = %x",buf,ATTR);
  
     if(a == 0)
	   a = 1;	 
	 if(ATTR & ATTR_DIRECTORY)
	 { 
	   mkdir(buf+3);
	   continue;
	 }
	 else
     {
		 if ((file2 = fopen(buf+3,"wb+")) == NULL)
     {  
      return;
		 }    
	 else 
		 HANDLE1 = open_file(buf);
	 }
	if(HANDLE1 != FAIL)
		do{	     
	    cc = read_file(HANDLE1,buf+400,50000);
		printf("\nreaded chars = %ld ",cc);
        fwrite(buf+400,1,cc,file2);
		 //printf("bbbbbbbb");
		if(cc != 50000)
		{   //printf("aaaaaaaa");
			close_file(HANDLE1);
			//printf("ccccccccc"); 
			
		break;   
		}   
	
	}while(1);
    else{
	//printf("Openfile failed!");
	}
    fclose(file2);	 
  }

/* 删除文件CREATE_FOLDER_TEST\\created_file.txt */
  //delete_file("CREATE_FOLDER_TEST\\created_file.txt");

/* 删除目录CREATE_FOLDER_TEST */
  //delete_folder("CREATE_FOLDER_TEST");

scanf("%c",&a);	
}
   
/*
+FFTR--------------------------------------------------------------------
$Log: main.C,v $
Revision 1.12  2007/05/10 11:13:14  design
改进函数static u32 Get_Previous_Cluster_From_Current_Cluster(u32 Cluster)
解决连续删除文件死机的问题。
测试方法:在OK目录下连续写500个长文件名文件,再删除测试成功

Revision 1.11  2007/03/31 14:25:25  design
给read_file(),write_file()增加一种优化的实现方法
对应fat_cfg.h增加两个编绎宏
#define Read_File_Optimization_Selector 1
#define Write_File_Optimization_Selector 1

Revision 1.10  2007/03/25 03:54:08  design
注:v1.9建目录成功,目录分离未成功

Revision 1.9  2007/03/25 03:42:24  design
create_file(),create_folder(),rename_file()测试通过
create_file(),create_folder()测试方法如下:
在目录test,ok下分别建500个文件,目录,之后用disk_enumeration分
离成功
rename_file()测试方法如下:
将文件"C:\TEST.PDF"改名为"DFDFDFDFDFDFDFDFSDFSDTONY.TXT"成功

Revision 1.8  2007/03/17 03:10:19  design
write_file测试成功
测试方法:
写3m rar文件,再读出,解压通过

Revision 1.7  2007/03/11 10:23:33  yangwenbin
disk_enumeration,folder_enumeration函数测试成功
测试方法:
分离大小为127M IMG的所含文件,如rar,pdf等

Revision 1.6  2007/03/06 14:49:13  yangwenbin
cd_folder()函数测试成功

Revision 1.5  2007/03/06 12:26:49  yangwenbin
函数cd_folder()完成, mode 0/mode1两种模式测试通过

Revision 1.4  2007/03/04 03:00:53  yangwenbin
open_file(),f_seek(),read_file(),
文件:C:\longfilename directory for test\tony yang and\test_test.txt
测试成功

Revision 1.3  2007/03/03 15:39:37  yangwenbin
open_file,f_seek,read_file
读1.9M文件测试成功

Revision 1.2  2007/02/28 13:39:22  Design
函数open_file打开绝对路径+短文件名测试通过
使用C代码如下:
open_file("C:\\HELLO.TXT")

Revision 1.1.1.1  2007/02/24 07:59:45  yangwenbin
增加FAT16文件系统基本代码

-FFTR--------------------------------------------------------------------
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -