📄 fatfunction.h
字号:
/****************************************Copyright (c)**************************************************
** CH374做主机操作U盘读写程序
** FAT16文件系统层
** 功能函数头文件
**
** VBeat 0.5
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: FATFunction.H
**创 建 人: 徐亦朱
**最后修改日期: 2007年9月27日
**描 述: FAT文件系统功能函数头文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 徐亦朱
** 版 本: VBeat 0.1
** 日 期: 2007年9月24日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月27日
** 描 述: 优化数据结构及算法
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
FS FAT ;
FILE files[ 2 ] ;
clock sysclock ;
UINT8 DiskNums ; //DISKBUF能存储的扇区数
UINT8 FileNums ; //FILEBUF能存储的扇区数
/*********************************************************************************************************
** 函数名称: ProcessName
** 功能描述: 8 + 3文件名处理
**
** 输 入: string: 指向一个普通的文件名
** filename: 指向一个11字节的空数组
** 输 出: string指向的文件名被处理为11字节大小8 + 3文件名数组
**
** 全局变量: 无
** 调用模块: 无
** 调试码: DEBUG_NAME
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
static void ProcessName( const UINT8 * string, UINT8 * filename ) ;
/*********************************************************************************************************
** 函数名称: ProcessPath
** 功能描述: 文件路径处理
**
** 输 入: string: 指向要操作的文件路径,路径输入格式: /……/……/……
** filename: 指向一个11字节的空数组
** 输 出: string指向的文件路径被处理为8 + 3字符数组
** A.返回EndPath报告路径处理结束,当前处理的是最终文件名
** B.否则返回继续标识符NextContinue
**
** 全局变量: 无
** 调用模块: ProcessName
** 调试码: DEBUG_PATH
**
**PS: A.暂时文件名输入需要尽可能准确,例如不要输入10个字符的基本名
** B.此程序因为没有对static变量Count初始化而导致POINT2指针乱飞,由于编译器会经常出现莫名其妙的问题
** 对static显式初始化很有必要
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 ProcessPath( const UINT8 *string, UINT8 * filename ) ;
/*********************************************************************************************************
** 函数名称: x16List
** 功能描述: 根据簇号计算并读取FAT16表中相关信息
**
** 输 入: clus : 要计算的簇号
** value : 要更新的值
** ProcessMode: 函数工作模式
** A.ModeZ1: 更新FAT表
** B.ModeZ2: 查找FAT表中下个簇的值
** 输 出: A.返回ERR_List报告异常传输错误
** B.返回ListSuccess表示操作成功完成
** C.ModeZ2下会返回下个簇的值
** 全局变量: FAT.SecPerClus, FAT.FirstDataSector, DISKBUF
** 调用模块: mReadSector, mWriteSector
** 调试码: DEBUG_LIST
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT16 x16List( UINT16 clus, UINT16 value, UINT8 ProcessMode ) ;
/*********************************************************************************************************
** 函数名称: x16CheckClus
** 功能描述: FAT16查可写簇以便写入数据
**
** 输 入: 无
** 输 出: 返回找到的可写簇簇号
** A.返回ERR_CheckClus报告异常传输错误
** B.若磁盘簇已写满,返回簇号0
**
** 全局变量: FAT.RsvdSecCnt, FAT.FirstRootSector, FAT.BytesPerSec
** 调用模块: mReadSector, mWriteSector
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT16 x16CheckClus( void ) ;
/*********************************************************************************************************
** 函数名称: xProcessDirectory
** 功能描述: 处理目录/文件名
**
** 输 入: wr: 指向文件信息结构FILE的指针
** Attribute: 目录/文件操作模式
** A.模式ModeX1: 创建新文件
** B.模式ModeX2: 创建新目录
** C.模式ModeX3: 对打开的文件截0
** D.模式ModeX4: 删除文件/目录
** 输 出: 根据模式选择完成相应的操作
** A.返回ERR_Directory 报告异常传输错误
** B.返回DirectorySuccess表示操作成功完成
**
** 全局变量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector, FAT.FirstSectofClu
** 调用模块: mReadSector, mWriteSector, x16CheckClus, x16List
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 xProcessDirectory( FILE * wr, UINT8 Attribute ) ;
/*********************************************************************************************************
** 函数名称: x16RootDirectory
** 功能描述: FAT16根目录下新建目录/文件名
**
** 输 入: wr : 指向文件信息结构FILE的指针
** Attribute: 目录/文件操作模式
** A.模式ModeX1: 创建新文件
** B.模式ModeX2: 创建新目录
** 输 出: 根据模式选择完成相应的操作
** A.返回ERR_Directory 报告异常传输错误
** B.返回DirectorySuccess表示操作成功完成
** C.返回ERR_FullRoot报告根目录已写满,无法正常创建文件/目录
**
** 全局变量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector, FAT.RootDirSectors, FAT.FirstRootSector,
** 调用模块: mReadSector, mWriteSector, xProcessDirectory
** 调试码: DEBUG_YCF
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16RootDirectory( FILE * wr, UINT8 Attribute ) ;
/*********************************************************************************************************
** 函数名称: x16Creat
** 功能描述: FAT16目录下处理目录/文件名
**
** 输 入: wr : 指向文件信息结构FILE的指针
** Attribute: 目录/文件操作模式
** A.模式ModeX1: 创建新文件
** B.模式ModeX2: 创建新目录
** 输 出: 根据模式选择完成相应的操作
** A.返回ERR_Creat 报告异常传输错误
** B.返回Creat_Success表示操作成功完成
**
** 全局变量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector
** FAT.SecPerClus, FAT.FirstSectofClu, FAT.shift, DiskNums
** 调用模块: mReadSector, mWriteSector, x16List, x16CheckClus, xProcessDirectory
** 调试码: DEBUG_CREAT
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16Creat( FILE * wr, UINT8 Attribute ) ;
/*********************************************************************************************************
** 函数名称: CheckFile
** 功能描述: 在一定范围内查找文件/目录
**
** 输 入: wr : 指向文件信息结构FILE的指针
** TotalSectors: 为该范围总扇区数
** ProcessSector: 为该范围首地址
** 输 出: 在该范围内查找文件,返回FindFlag标识,以便外部程序调用
** 找到的文件/目录在簇内的地址信息记录在FIND结构中
** A.返回ERR_Check报告异常传输错误
** B.返回FindFlag为0x00表示未找到文件
** C.返回FindFlag为0x01表示找到文件
**
** 全局变量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector, DiskNums
** 调用模块: mReadSector
** 调试码: DEBUG_CF
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 CheckFile( FILE * wr, UINT16 TotalSectors, UINT32 ProcessSector ) ;
/*********************************************************************************************************
** 函数名称: CheckFirst16
** 功能描述: 在FAT16根目录内查找文件 /目录
**
** 输 入: wr : 指向文件信息结构FILE的指针
** 输 出: 在该范围内查找文件,返回FindFlag标识,以便外部程序调用
** 找到的文件/目录在簇内的地址信息记录在FIND结构中
** A.返回ERR_Check报告异常传输错误
** B.返回FindFlag为0x00表示未找到文件
** C.返回FindFlag为0x01表示找到文件
**
** 全局变量: FAT.RootDirSectors, FAT.FirstRootSector
** 调用模块: CheckFile
** 调试码: 无
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 CheckFirst16( FILE * wr ) ;
/*********************************************************************************************************
** 函数名称: x16CheckFile
** 功能描述: 在FAT16目录内查找文件
**
** 输 入: wr : 指向文件信息结构FILE的指针
** 输 出: 在该范围内查找文件,返回FindFlag标识,以便外部程序调用
** 找到的文件/目录在簇内的地址信息记录在FIND结构中
** A.返回ERR_Check报告异常传输错误
** B.返回FindFlag为0x00表示未找到文件
** C.返回FindFlag为0x01表示找到文件
**
** 全局变量: wr -> find.Offset, FAT.SecPerClus, FAT.FirstSectofClu
** 调用模块: x16List, CheckFile
** 调试码: DEBUG_XCF
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16CheckFile( FILE * wr ) ;
/*********************************************************************************************************
**
** 引用变量及函数声明
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern UINT8 xdata DISKBUF[ DISKBUF_BYTES ] ; //磁盘缓冲区
extern UINT8 xdata FILEBUF[ FILEBUF_BYTES ] ; //文件缓冲区
extern UINT8 mReadSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8 mWriteSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -