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 + -
显示快捷键?