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

📄 fat12.h

📁 FAT12 文件系统,囊括了文件系统的各个函数,另外还包括了地址映射,适合读写NAND_FLASH
💻 H
📖 第 1 页 / 共 2 页
字号:

#define DISK_64M  64
#define DISK_48M  48
#define DISK_32M  32
#define DISK_16M  16

#define DEBUG_FAT        1
#define FAT_SIZEOFWORD   MASS_MEMORY_SIZE/(16*1024)	//64Mbyte的FLASH包含4096个块(镞),因此每个FAT表应该有4096个字,共8K字节


/********************************* 以下为用户可使用的函数,共15个 ***********************************/

 
/*** 函数 int fat_format(unsigned char Media,unsigned char Sizeofdisk_M,unsigned char FilesysType) **/
/* 功能:磁盘格式化																					*/
/* 入口参数:unsigned char Media----取NAND_FLASH_Drv,介质类型,可移动磁盘							*/
/* 			 unsigned char Sizeofdisk_M----取DISK_64M,即64											*/
/*			 unsigned char FilesysType ----取PART_TYPE_FAT16										*/
/* 返回参数:该镞第一个扇区地址																		*/
/****************************************************************************************************/
int fat_format(unsigned char Media,unsigned char Sizeofdisk_M,unsigned char FilesysType);//OK



/******************************* 函数 BYTE Format_decision(void) ************************************/
/* 功能:	系统启动时扫描引导区(逻辑块0),判断该块是否空,如果空则说明整个NAND_FLAS还没有格式化过;	*/
/*			或者非空时,说明已格式化过,再读取0扇区内容,判断该格式是否符合系统自己的FAT16格式。如果*/
/*			需要格式化则返回非0值0xff,否则不需要格式化返回0。										*/
/* 入口参数:无																						*/
/* 出口参数:0xff----需要格式化;0---不需要格式化													*/
/* 说明:	该函主要防止用户自己在PC机上对NAND_FLASH格式化后将不能使系统正常工作,此时需要系统再做一*/
/*			次格式化工作,根据返回值决定是否需要调用格式化函数,并且向用户给出提示信息				*/
/****************************************************************************************************/
BYTE Format_decision(void);//OK



/******************************* 函数 int fat_mkdir( const char *dirname) ***************************/
/* 功能:在已经存在的父目录下创建一个子目录,仅1级目录: \父目录\新子目录								*/
/* 入口参数: const char *dirname----准备创建的目录名(打印格式),应该为[\aaaa\bbbbbbbbbbb],其中aaaa	*/
/*			是已经存在的父目录,bbbbbbbbbbb是即将建立的目录名(各级目录名长度都要小于11个字符);如果	*/
/*			只有[\bbbbbbbbbbb],即只有新目录名,则在根目录下创建新目录								*/
/* 出口参数:创建成功返回0																			*/
/****************************************************************************************************/
int fat_mkdir( const char *dirname);//OK



/**************************** 函数 int fat_rmdir( const char *dirname) ******************************/
/* 功能:删除目录,当在该目录下存在子目录或文件则不能删除											*/
/* 入口参数: const char *dirname----待删除的目录,打印格式[\aaaaaa\aaaa\aaaaa]						*/
/* 出口参数:删除成功返回0,不成功返回3,4,5,6														*/
/****************************************************************************************************/
int fat_rmdir( const char *dirname);//OK



/******************** 函数 int file_creat(const char* filename, BYTE attribute) *********************/
/* 功能:在已有的目录下创建新的文件名,仅1级目录: \父目录\新文件名;									*/
/* 入口参数: const char *filename----准备创建的文件名,打印格式[\aaaa\bbbbb.bbb],若输入是[\bbbb.bbb]*/
/*			 则在根目录下创建文件																	*/
/*			 BYTE attribute----新文件属性															*/
/* 出口参数:创建成功返回0,并且创建的文件被打开														*/
/* 说明:该文件的格式包括完整的目录和文件名															*/
/****************************************************************************************************/
int file_creat(const char* filename, BYTE attribute);//OK



/**************************** 函数 int file_open(const char* filename) ******************************/
/* 功能:在文件数组files[]中寻找一个空文件缓冲区,将FLASH中对应的文件目录信息读出到该缓冲区中		*/
/*		并将该文件数组中的文件标识为占用(1),不可以被其他文件使用									*/
/* 入口参数:const char* filename----文件路径及文件名,打印格式[\aaaaaa\aaaa\aaaaa.bbb]				*/
/* 出口参数:返回该文件在数组中的编号(0~7)															*/
/* 说明:文件打开之后就获得了StartSectorNum、CurrentSectorNum、SectorOffset、offset信息,其他函数就	*/
/* 		可以对文件进行读写。																		*/
/****************************************************************************************************/
int file_open(const char* filename);//OK



/****************************** 函数 int file_close(int file_number) ********************************/
/* 功能:根据输入的编号file_number将文件数组files[file_number]中的文件时间信息更新,同时更新FLASH	*/
/*		中对应的文件目录信息,最后将该文件数组中的文件标识为空,可以给其他文件使用					*/
/* 入口参数:int file_number----文件数组标号,在0~15之间取值											*/
/* 出口参数:关闭成功返回0																			*/
/****************************************************************************************************/
int file_close(int file_number);//OK
//
//  不保存文件,简单释放文件;
//
int file_free(int file_number);
// 
// 不释放句柄,保存文件信息;
//
int file_save(int file_number);//OK


/************** 函数 long file_offset_seek(int file_number, long offset, int origin) ****************/
/* 功能:在文件数组files[file_number]中重新定位偏移位置offset,然后更新将该数组文件中offset对应的  	*/
/*		CurrentSectorNum、SectorOffset、offset更新.该函数主要用来改变offset和相关的值,为读写做准备.	*/
/* 入口参数:int file_number ----文件数组中某个文件号												*/
/*			long offset----相对于origin的偏移量,以字节为单位,可以为负值							*/
/*			int origin ----偏移量的相对基准类型,取三种值:FROM_STATR、FROM_CUR、FROM_END			*/
/* 出口参数:返回该数组文件中的更新了的偏移量														*/
/* 说明:	用户使用函数																			*/
/****************************************************************************************************/
long file_offset_seek(int file_number, long offset, int origin);//OK



/**************** 函数 int file_read(int file_number, void* buffer, unsigned int bytes) *************/
/* 功能:	按字节读出文件内容到buffer,读完文件之后,文件中的CurrentSectorNum、SectorOffset、offset都*/
/*			指向读取之后的位置																		*/																	
/* 入口参数:file_number 准备读第file_number个已打开的文件; 											*/
/*			buffer 文件内容缓冲区																	*/
/*			bytes 从文件当前偏移指针开始(offset)需要读出的字节数									*/
/* 出口参数:已读出的字节数,同时在buffer中保存已读出的文件内容; 0 操作失败      						*/															
/****************************************************************************************************/
unsigned int file_read(int file_number, void* buffer, unsigned int bytes);//OK



/**************** 函数 int file_write(int file_number, void* buffer, unsigned int bytes) ************/
/* 功能:	对已打开的文件将buffer中的内容写入flash中,同时记录文件的长度dir.deFileSize到已打开的数组*/
/*			文件中.写完文件之后,文件中的CurrentSectorNum、SectorOffset、offset都指向文件末端		*/																	
/* 入口参数:file_number 准备对第file_number个已打开的文件进行写操作; 								*/
/*			bytes 准备写入的字节数																	*/
/*			buffer 写入的内容																		*/
/* 出口参数:bytes 写入的字节总数; 0 操作失败          												*/											
/****************************************************************************************************/
unsigned int file_write(int file_number, unsigned char* buffer, unsigned int bytes);//OK



/*************************** 函数 int file_delete( const char *filename) ****************************/
/* 功能:	根据文件的完整路径名删除文件															*/																	
/* 入口参数:filename:需要删除的文件名,一个完整的路径名.打印格式[aaaaa\aaaa.bbb];					*/
/* 出口参数:0 执行成功;4 文件不存在;5 在目录项中设置文件已删除不成功;6 filename是目录名           */											
/* 说明:	用户使用函数,注意文件关闭之后不能再对它做关闭操作										*/
/****************************************************************************************************/
int file_delete( const char *filename);//OK



/************************** 函数 int file_rename( const char *oldname, const char *newname ) ********/
/* 功能:	重命名文件,更新FALSH																	*/
/* 入口参数:oldname:旧文件名,是一个完整的路径名,打印格式[aaaaa\aaaa.bbb]							*/
/*			newname:新文件名,只有文件名,不包含目录,格式[aaaaa.bbb]								*/
/* 出口参数:0 执行成功;-2 文件名格式不正确;-3 旧文件不存在或新文件名已存在						*/
/****************************************************************************************************/
int file_rename( const char *oldname, const char *newname ); //OK



/************************** 函数 int get_file_stat( const char *filename, _STAT * stat) *************/
/* 功能:	根据文件的完整路径名读出文件的状态(目录项)信息											*/																	
/* 入口参数:filename:需要获得其目录项信息的文件名,是一个完整的路径名,打印格式[aaaaa\aaaa.bbb];	*/
/* 出口参数:0 执行成功;1 文件不存在;stat 读到的目录项信息											*/
/* 说明:	用户使用函数																			*/
/****************************************************************************************************/
int get_file_stat( const char *filename, _STAT * stat);//


/************************************ 函数 int Gen_lgToph(void) *************************************/
/* 功能:	依次读取FLASH的每个块,建立逻辑地址到物理地址的映射表lgToph[FAT_SIZEOFWORD],该表中如果 */
/*			数据为0xFFFF说明未对应物理地址,即该逻辑地址未使用										*/
/* 入口参数:无																						*/
/* 出口参数:返回-1,则说明逻辑地址有误;否则返回已经编号的块的总数									*/
/****************************************************************************************************/
int Gen_lgToph(void);//OK
                               

/********************************* 函数 WORD GarbageProcess(void) ***********************************/
/* 功能:	垃圾块处理,按全局变量GarbageSearchNumber(物理块号)读取FLASH的一个块,判断该块是否为脏*/
/*			数据或被废弃的数据,并且该块非坏块。如果满足这些条件则擦除该块,同时GarbageSearchNumber	*/
/*			增1,然后返回																			*/
/* 入口参数:无																						*/
/* 出口参数:如果找到并擦除了一个垃圾块,则返回该块号,否则返回0xffff								*/
/* 说明:	该函数每次只扫描一个块																	*/
/****************************************************************************************************/
WORD GarbageProcess(void);//OK


/********************************* 函数 void FileDebrisProcess(void) ********************************/
/* 功能:	文件碎片处理,在主机删除本设备的文件时,由于USB操作不能更改文件映射表和将不用的文件块标	*/
/*			识为废弃,只修改FAT表中对应的逻辑块为0,这样文件对应的块无用但被占用,成为文件碎片块,本*/
/*			函数的功能即识别寻找文件碎片,将其擦除,同时将逻辑映射表写为空(0xffff).					*/
/* 入口参数:无																						*/
/* 出口参数:无																						*/
/* 注意:	调用该函数前应存在逻辑映射表															*/
/****************************************************************************************************/
void FileDebrisProcess(void);//OK


void GetFatInfo(void);
 
void 	GarbageProcessAll(void);
 
// 得到文件的长度;
DWORD GetFileSize(int file_num);
/************ 函数 void unformat_name(char * filename, const unsigned char dirname[11]) *************/
/* 功能:	将dirname[11]中的8-3存储格式的文件名转换成不带空格的打印格式文件名存到filename中		*/
/* 入口参数:char * filename---准备存放转换后的打印格式的文件名缓冲区								*/
/*			const unsigned char dirname[11]---待转换的存储格式文件名								*/
/* 出口参数:无																						*/
/* 说明:	用户使用函数																			*/
/****************************************************************************************************/
void unformat_name(char * filename, const unsigned char *dirname);

/**********************************************************************************************/
/* 功能:	 剩余容量计算                                                                       */
/* 入口参数:无。                              																			          */
/* 返回值:剩余容量K																					                                */
/**********************************************************************************************/
DWORD GetCapability(void);
 
#endif

⌨️ 快捷键说明

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