📄 fat12.h
字号:
#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 + -