?? fatprocess.h
字號(hào):
/****************************************Copyright (c)**************************************************
** CH374做主機(jī)操作U盤(pán)讀寫(xiě)程序
** FAT16文件系統(tǒng)層
** 頭文件
**
** VBeat 0.5
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: FATProcess.H
**創(chuàng) 建 人: 徐亦朱
**最后修改日期: 2007年9月27日
**描 述: FAT文件系統(tǒng)層接口函數(shù)頭文件
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創(chuàng)建人: 徐亦朱
** 版 本: VBeat 0.3
** 日 期: 2007年9月21日
** 描 述: 完善程序風(fēng)格
**
**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月27日
** 描 述: 優(yōu)化數(shù)據(jù)結(jié)構(gòu)及算法
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 * rFILEBUF ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): FATInit
** 功能描述: FAT文件系統(tǒng)參數(shù)初始化
**
** 輸 入: 無(wú)
** 輸 出: FAT文件系統(tǒng)各項(xiàng)參數(shù)初始化
** A.返回ERR_Init報(bào)告異常傳輸錯(cuò)誤
** B.返回InitSuccess表示初始化成功完成
**
** 全局變量: FAT.SecPerClus, FAT.BytesPerSec, FAT.RsvdSecCnt, FAT.shift, FAT.RootDirSectors
** FAT.FirstRootSector, FAT.FirstDataSector, FAT.extra, DiskNums, FileNums
** 調(diào)用模塊: mReadSector
** 調(diào)試碼: DEBUG_Init
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATInit( void ) ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): FATOpen
** 功能描述: 打開(kāi)文件函數(shù)
**
** 輸 入: string: 指向要打開(kāi)的文件名( 路徑形式,例如: "/……/……/文件名" )
** ProcessMode: 操作模式ProcessMode:
** ModeA1: 0x00 -- 打開(kāi)文件,以便讀,若文件不存在則退出
** ModeA2: 0x80 -- 打開(kāi)文件,以便寫(xiě),若文件不存在則退出
** ModeA3: 0x01 -- 打開(kāi)文件,以便讀,先將文件長(zhǎng)度截為0,如果文件不存在則退出
** ModeA4: 0x81 -- 打開(kāi)文件,以便寫(xiě),先將文件長(zhǎng)度截為0,如果文件不存在則退出
** ModeA5: 0x82 -- 打開(kāi)文件,以便寫(xiě),向已有文件的尾部追加內(nèi)容,如果文件不存在則退出
** ModeB1: 0x10 -- 打開(kāi)文件,以便讀,若文件不存在則創(chuàng)建之
** ModeB2: 0x90 -- 打開(kāi)文件,以便寫(xiě),若文件不存在則創(chuàng)建之
** ModeB3: 0x11 -- 打開(kāi)文件,以便讀,先將文件長(zhǎng)度截為0,若文件不存在則創(chuàng)建之
** ModeB4: 0x91 -- 打開(kāi)文件,以便寫(xiě),先將文件長(zhǎng)度截為0,若文件不存在則創(chuàng)建之
** ModeB5: 0x92 -- 打開(kāi)文件,以便寫(xiě),向已有文件的尾部追加內(nèi)容,若文件不存在則創(chuàng)建之
** ModeC1: 0xF1 -- 打開(kāi)目錄,以便讀寫(xiě),若目錄不存在則創(chuàng)建之
** ModeC2: 0xF2 -- 刪除文件/目錄,如果文件/目錄不存在則退出
** 輸 出: 逐級(jí)打開(kāi),需先打開(kāi)上層目錄
** 找到的文件/目錄在簇內(nèi)的地址信息記錄在FIND結(jié)構(gòu)中
** A.返回ERR_Check報(bào)告異常傳輸錯(cuò)誤
** B.返回OpenSuccess則操作成功
** C.返回ERR_NOFile查找文件失敗,磁盤(pán)中無(wú)此文件
** D.返回ERR_OPEN打開(kāi)文件失敗,沒(méi)有可用的文件結(jié)構(gòu)
**
** 全局變量: 無(wú)
** 調(diào)用模塊: ProcessPath, CheckFirst16, x16CheckFile, xProcessDirectory, x16RootDirectory, x16Creat
** 調(diào)試碼: DEBUG_OPEN
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATOpen( const UINT8 *string, UINT8 ProcessMode ) ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): x16ReadFile
** 功能描述: FAT16讀取文件
**
** 輸 入: ReadNums: 可選的讀取扇區(qū)數(shù),若文件數(shù)據(jù)小于要求量,只會(huì)讀取文件實(shí)際長(zhǎng)度
** 輸 出: 將所要求數(shù)量的文件數(shù)據(jù)讀取到文件緩沖區(qū)FILE_BUF
** A.返回ERR_Read報(bào)告異常傳輸錯(cuò)誤
** B.返回Clu_End表示一簇已讀完,由于程序算法問(wèn)題,此時(shí)FILEBUF中有效數(shù)據(jù)可能不足2048字節(jié)
** C.返回File_End表示文件已讀完,由于程序算法問(wèn)題,此時(shí)FILEBUF中應(yīng)有零碎數(shù)據(jù)( 不滿(mǎn)一個(gè)扇區(qū) )
** D.返回ReadSuccess表示讀取成功完成,并且不屬于上述情況
**
** 全局變量: files[ i ].find.Offset, FAT.SecPerClus
** 調(diào)用模塊: x16ReadFAT, mReadSector,
** 調(diào)試碼: DEBUG_READ
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16ReadFile( UINT8 ReadNums, UINT8 FileNum ) ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): x16WriteFile
** 功能描述: FAT16寫(xiě)文件
**
** 輸 入: WriteNums: 可選的寫(xiě)入字節(jié)數(shù)
** 輸 出: 將FILE_BUF中的數(shù)據(jù)寫(xiě)入文件
** A.返回ERR_Write報(bào)告異常傳輸錯(cuò)誤
** B.返回WriteSuccess則寫(xiě)入成功返回
** C.返回ERR_FullDisk表示磁盤(pán)已寫(xiě)滿(mǎn),無(wú)法正常寫(xiě)入數(shù)據(jù)
**
** 全局變量: FAT.SecPerClus, FAT.SecPerClus, files[ i ].wr.write.extra
** 調(diào)用模塊: x16CheckClus, mReadSector, mWriteSector, x16List, memmove, memcpy
** 調(diào)試碼: DEBUG_WRITE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 x16WriteFile( UINT16 WriteNums, UINT8 FileNum ) ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): FATClose
** 功能描述: 關(guān)閉文件
**
** 輸 入: FileNum: 要關(guān)閉的文件編號(hào)
** 輸 出: 文件緩沖區(qū)FILE_BUF中不滿(mǎn)一個(gè)扇區(qū)的零碎數(shù)據(jù)被刷新到文件中
** A.返回ERR_Close報(bào)告異常傳輸錯(cuò)誤
** B.返回CloseSuccess則操作成功
**
** 全局變量: files[ i ].wr.write.extra, wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector ,
** FAT.shift, FAT.SecPerClus
** 調(diào)用模塊: x16List, mReadSector, x16CheckClus, mWriteSector, memcpy
** 調(diào)試碼: DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATClose( UINT8 FileNum ) ;
/*********************************************************************************************************
** 函數(shù)名稱(chēng): FATCopy
** 功能描述: 復(fù)制文件
**
** 輸 入: deststr: 為要操作的目標(biāo)文件名( 路徑形式,例如: "/……/……/…….……" )
** scrstr: 為要操作的源文件名( 路徑形式,例如: "/……/……/…….……" )
** 輸 出: 源文件的數(shù)據(jù)信息寫(xiě)入到目標(biāo)文件中
** A.返回ERR_Copy報(bào)告異常傳輸錯(cuò)誤
** B.返回CopySuccess則操作成功
**
** 全局變量: FileNums, DiskNums
** 調(diào)用模塊: FATOpen, x16ReadFile, x16WriteFile, FATClose
** 調(diào)試碼: DEBUG_CLOSE
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8 FATCopy( const UINT8 *deststr, const UINT8 *scrstr ) ;
/*********************************************************************************************************
**
** 引用變量及函數(shù)聲明
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern FS FAT ;
extern FILE files[ 2 ] ;
extern clock sysclock ;
extern UINT8 DiskNums ; //DISKBUF能存儲(chǔ)的扇區(qū)數(shù)
extern UINT8 FileNums ; //FILEBUF能存儲(chǔ)的扇區(qū)數(shù)
extern UINT8 xdata DISKBUF[ DISKBUF_BYTES ] ; //磁盤(pán)緩沖區(qū)
extern UINT8 xdata FILEBUF[ FILEBUF_BYTES ] ; //文件緩沖區(qū)
extern UINT8 mReadSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8 mWriteSector( UINT32 StartLba, UINT8 SectCount, PUINT8 DataBuf );
extern UINT8 ProcessPath( const UINT8 *string, UINT8 * filename ) ;
extern UINT16 x16List( UINT16 clus, UINT16 value, UINT8 ProcessMode ) ;
extern UINT16 x16CheckClus( void ) ;
extern UINT8 xProcessDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8 x16RootDirectory( FILE * wr, UINT8 Attribute ) ;
extern UINT8 x16Creat( FILE * wr, UINT8 Attribute ) ;
extern UINT8 CheckFile( FILE * wr, UINT16 TotalSectors, UINT32 ProcessSector ) ;
extern UINT8 CheckFirst16( FILE * wr ) ;
extern UINT8 x16CheckFile( FILE * wr ) ;
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -