fs16.h
来自「uCOS-II for AT91M55800A完整实例」· C头文件 代码 · 共 137 行
H
137 行
#ifndef __FS16_H__
#define __FS16_H__
#include "..\uCOS270\ucos_ii.h"
//-----------------------------------------------------------------------
//文件系统的接口常量定义
#define FS_FILE_OPEN_NUM 10 //定义可打开的文件的数目
#define FS_FILE_BUF_SIZE 1 //定义缓冲区大小(单位为簇)
//-----------------------------------------------------------------------
//引导区标识符
#define FS_OEMNAME "MSDOS5.0" //操作系统的名称
#define FS_DRIVE_NUMER 0x80 //
#define FS_VOLUMEID 96162243 //卷标的ID号
#define FS_VOLUMELABEL "ZK_FS_DISK" //卷标
#define FS_FAT_TYPE "FAT16" //文件系统类型
//-----------------------------------------------------------------------
//硬盘结构参数
#define FS_SECTOR_SIZE 512 //每个扇区字节数
#define FS_CLUSTER_OF_SECTORS 2 //每簇的扇区数
#define FS_REVSER_SECTORS 0 //保留的扇区数
#define FS_FAT_NUMS 2 //FAT表的个数
#define FS_ROOTDIR_ENTRIES 512 //根目录项数
#define FS_ROOTDIR_SIZE 32 //根目录项的字节数
#define FS_TOTAL_SECTORS 0 //分区扇区总数(小于32MByte)
#define FS_HUGE_SECTORS 999999999 //分区扇区总数(大于32MByte)
#define FS_MEDIA_TYPE 0xF8 //介质类型(F8--硬盘)
#define FS_NUM_FAT_SECTORS 250 //FAT占用的扇区数
#define FS_SECTORS_PER_TRACK 53454 //每磁道的扇区数
#define FS_NUM_HEAD 63 //磁头个数
#define FS_HIDDEN_SECTORS 32 //隐含扇区数
//--------------------------------------------------------------------------
//目录项
#define FS_FILE_READ_ONLY 0x01 //只读
#define FS_FILE_HIDDEN 0x02 //隐含
#define FS_FILE_SYS_FILE 0x04 //系统
#define FS_FILE_VOLUME 0x08 //卷标
#define FS_FILE_SUBDIR 0x10 //字目录
#define FS_FILE_ARCHIVE 0x20 //归档(文件修改过)
//----------------------------------------------------------------------------
//时间日期
#define FS_TIME_SEC2 0x001F //时间秒
#define FS_TIME_MIN 0x07E0 //时间分
#define FS_TIME_HOURS 0xF800 //时间时
#define FS_DATE_DAY 0x001F //日期天
#define FS_DATE_MONTH 0x01E0 //日期月
#define FS_DATE_YEAR 0xFE00 //日期年
#define FS_DATE_YEAR_BASE 1980 //日期起始年
//----------------------------------------------------------------------------
//偏移地址及常量
#define FS_SIGNATURE_WORD 0x55AA //分区有效标识符
#define FS_SIGNATURE_OFFSET 0x1FE //分区标识有效偏移地址
#define FS_PBP_OFFSET 0x0000 //引导区的偏移地址
#define FS_FAT1_OFFSET FS_PBP_OFFSET+FS_REVSER_SECTORS/FS_CLUSTER_OF_SECTORS //FAT表1的偏移地址
#define FS_FAT2_OFFSET FS_FAT1_OFFSET+FS_NUM_FAT_SECTORS //FAT表2的偏移地址
#define FS_ROOT_DIR_OFFSET FS_FAT2_OFFSET+FS_NUM_FAT_SECTORS
#define FS_DATA_OFFSET FS_ROOT_DIR_OFFSET+FS_ROOTDIR_ENTRIES/(FS_ROOTDIR_ENTRIES/FS_ROOTDIR_SIZE) //数据区的起始偏移地址
//------------------------------------------------------------------------------
//定义分区数据结构
//----------------------------------------------------------------------------------------
#pragma pack(1)
typedef struct{
char JMP_Instruction[3]; //跳转指令
char OEMNameAndVersion[8]; //系统名称
FS_BPB BPB; //BPB参数区
INT8U DriverNumber; //驱动器的类型
INT8U Reserved; //保留
INT8U ExtBoot; //外部引导标识
INT32U VolumeID; //卷标ID
char VolumeLabel[11]; //卷标
char FileSystemType[8]; //文件系统类型
}FS_PBP;
//******************************************************************************
typedef struct{
INT16U BytesPerSector; //每扇区的字节数
INT8U SectorsPerCluster; //每个簇的扇区数
INT16U ReservedSectors; //保留的扇区个数
INT8U NumFATs; //系统有几个FAT表
INT16U RootDirEntries; //根目录项数
INT16U TotalSectors; //分区扇区总数(小于32MByte)
INT8U MedialType; //介质类型
INT16U NumFATSectors; //每个FAT表占用的扇区数
INT16U SectorPerTrack; //每个磁道的扇区数
INT16U NumHeads; //磁头个数
INT32U HiddenSectors; //隐含扇区数
INT32U HugeSectors; //分区扇区总数(大于32MByte)
}FS_BPB;
//*********************************************************************************
//------------------------------------------------------------------------------------------
typedef struct{
char FileName[8]; //文件名
char FileNameExt[3]; //文件扩展名
INT8U Attribute; //文件属性
INT8U Reserved[10]; //保留
INT16U Time; //文件创建时间
INT16U Date; //文件创建日期
INT16U StartClusterNum; //文件起始簇
INT32U FileSize; //文件大小
}FS_ROOT;
//------------------------------------------------------------------------------------------
typedef struct{
char *FileBuf; //指向文件缓冲区的起始地址
INT32U FileStartCluster; //文件的起始簇
INT32U TaskID; //任务ID号
INT32U FileCluster; //文件当前的簇的位置
INT32U Filemode; //打开文件的模式
INT32U FileCurpos; //文件读写的当前位置
INT32U Filesize; //文件的大小
}FS_FILE;
//------------------------------------------------------------------------------------------
//文件系统的返回类型的常量
#define FS_FILE_NO_EXITS //文件不存在
#define FS_FILE_NO_OPEN //文件没有打开
#define FS_FILE_DELETED //文件已删除
#define FS_FILE_OPENED //文件已打开
#define FS_FILE_CRC_ERR //文件校验出错
#define FS_FILE_BUF_FULL //文件缓冲区满
#define FS_FILE_NO_SHARP //文件不支持共享
//------------------------------------------------------------------------------------------
//文件打开方式常量
#define FS_FILE_OPEN //文件打开
#define FS_FILE_CLOSE //文件关闭
#define FS_FILE_SHARP //文件共享
#define FS_FILE_DELETE //文件删除
//-------------------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?