📄 fs.h
字号:
#ifndef FS_H
#define FS_H
typedef unsigned int uint32;
typedef unsigned short uint16;
/**
*
* FAT_ROOT文件系统(v1.0)
*<一>主体思想:
* (1).FAT_ROOT供一块.
* (2).FAT_ROOT往前推.
* (3).大盘分区处理
* (4).同时打开16个文件.
*
*
* 操作:
* 1.增加
* 2.删除
*
* 打开 fopen
* 关闭 fclose
* 读 fread
* 写 fwrite
* Seek
*
*/
#define LOCAL static
#define PUBLIC
#define FILE_NAME_8_3_LEN 12 //文件名长度同MS8.3.
#define FS_ROOT_ENTRY_SIZE 32 //文件目录项长度
typedef struct FILE_INFO{
int (*mFopen)(char *Name,char*mode);
int (*mFclose)(int hFile);
int (*mFread)(BYTE *buf,int n,int t,int hFile);
int (*mFwrite)(BYTE *buf,int n,int t,int hFile);
int (*mFseek)(int hFile,int offset,int begin);
uint32 (*mFtell)(int hFile);
int (*mFfomat)(char DevName);
int (*mFInit)(char DevName);
int (*mFIsIn)(int hFile);
int (*mFDel)(char *Name);
int (*mFIsFormat)(void);
int (*mFfeof)(int hFile);
}FILE_INTO_T;
typedef FILE_INTO_T* DISK_INFO_P;
typedef struct msdos_dir_entry {
BYTE name[8],ext[3]; /* name and extension */
BYTE attr; /* attribute bits */
BYTE lcase; /* Case for base and extension */
BYTE ctime_cs; /* Creation time, centiseconds (0-199) */
WORD ctime; /* Creation time */
WORD cdate; /* Creation date */
WORD adate; /* Last access date */
WORD starthi; /* High 16 bits of cluster in FAT32 */
WORD time,date,start;/* time, date and first cluster */
DWORD size; /* file size (in bytes) */
}DIR_ENTRY_T;
/**
*
*盘描述
*
*/
typedef struct Device {
char mDeviceName; //盘名:cdefg..z
uint32 mFirstBockNo; //盘上第一块,可以用做FAT_ROOT
uint32 mBlockSize; //盘上块大小
uint32 mBlockTotal; //盘上总块数
}DEVICE_T;
/**
*
*FAT_ROOT描述
*
*/
typedef struct FAT_ROOT{
char mDevName;
uint16 mFatNum; //有用的FAT块数
uint16 *mFatBuf; //FAT块起始地址
uint16 mRootEntryNum; //根目录条数
BYTE *mRootBuf; //根目录起始地址
uint16 mFatBlock[2]; //0-2
uint16 mCount; //1-3
BYTE mUpdate; //更新
}FAT_ROOT_T;
/**
*
*文件控制块描述
*
*/
typedef struct FCB{
char mDevName; //盘名:cdefg..z
char mFileName[FILE_NAME_8_3_LEN]; //文件名
uint32 mFileLen; //文件长度
uint32 mSequenceNum; //块顺序号
uint32 mOffset; //偏移量
uint16 mStartFatNo; //文件起始块FAT号
uint16 mCurFatNo; //文件当前块FAT号
uint32 mBlockSize; //块大小
BYTE *mBlockBuf; //块缓冲
BYTE mState; //使用状态
BYTE mUpdate; //待刷新
int mMode; //打开模式
int mHandle; //文件句柄
}FCB_T;
#define SECTOR_BAD_INDEX 5
PUBLIC int GetFileNo(void);
int FS_AddFlashDisk( DISK_INFO_P *f);
void DISK_Init(void);
#endif //FS_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -