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

📄 fs.h

📁 Nand flash FAT16 文件系统源代码
💻 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 + -