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

📄 fat.h

📁 文件系统,运行硬件环境:单片机,软件环境:keilc
💻 H
📖 第 1 页 / 共 2 页
字号:
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];      /*打开文件*/
    } open;
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];      /*创建文件*/
    } create;
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];      /*删除文件*/
    } del;
    struct
    {
        UINT8   sector;                         /*每次读出扇区数,返回实际读取扇区数*/
    } read;
    struct
    {
        UINT16  sector;                         /*写入总扇区数*/
    } write;
    struct
    {
        UINT32  sector;                         /*扇区偏移*/
    } locate;
    struct
    {
        UINT32  size;
        UINT16  date;
        UINT16  time;
        UINT8   attr;
    } modify;                                   /*修改文件目录数据*/
    struct
    {
        UINT32  byte32;                         /*字节偏移*/
    } blocate;
    struct
    {
        UINT8   count;                          /*输入要读取的字节数,返回实际读取字节数*/
        UINT8   buffer[ FAT_CMD_BUF_LEN-1 ];
    } bread;
    struct
    {
        UINT8   count;                          /*字节写入*/
        UINT8   buffer[ FAT_CMD_BUF_LEN-1 ];
    } bwrite;
}CMD_STRUCT;
typedef CMD_STRUCT idata FAT_CMD_DEF;

typedef struct
{
  UINT32 cluster;                               /*开始簇号*/
  UINT8  number;                                /*此簇号开始有几个连续的簇*/
}fat_chain;                                     /*用于构建簇链表*/
typedef fat_chain xdata fat_chain_def;
#define MAX_CL_PER_FRAG     UCHAR_MAX           /*number所允许的最大数值*/


#ifdef PRODUCE_LOCAL_VARIABLES
/*磁盘基础特性全局变量*/
STATIC UINT32 xdata fat_start_sector;                   /*第一个FAT表开始扇区地址*/
STATIC UINT32 xdata fat_count_fat_sector;               /*存放一个FAT表占用扇区数*/
STATIC BOOL         fat_bpb_num_fats;                   /*F_TRUE: 2 FATs - F_FALSE: 1 FAT*/
STATIC UINT32 xdata fat_data_start_sector;              /*存放数据区开始扇区地址*/
STATIC UINT32 xdata fat_dir_sector_clus32;              /*FAT12/16为根目录开始扇区数,FAT32为根目录开始簇号*/

STATIC UINT32 xdata fat_total_clusters;                 /*存放磁盘总的簇数*/
STATIC UINT8  idata fat_sec_perclus;                    /*每个簇占用扇区数*/

/*以下三个变量用于FAT32*/
       #if F_USE_FAT32 == 1
STATIC UINT16 xdata fat_fsinfo_sector;                  /*FSInfo所在扇区数*/
STATIC UINT32 xdata fat_fsi_free_count;                 /*剩下可用空簇(用于FAT32)*/
STATIC UINT32 xdata fat_fsi_nxt_free;                   /*从那里找剩余的空簇*/
       #endif

/*FAT基础参数*/
STATIC BOOL         fat_add_bit;                        /*是否已经在文件末尾添加过数据*/
       #if F_EN_ADD_EDN ==1
       UINT8  xdata fat_file_buffer[FAT_FILE_BUF_LEN];  /*文件缓冲区*/
       UINT8  xdata fat_disk_buffer[512];               /*磁盘缓冲区*/
       #else                                            /*不允许在文件尾部添加数据时,文件缓冲区与磁盘缓冲共用*/
       UINT8  xdata fat_file_buffer[FAT_FILE_BUF_LEN];  /*文件缓冲区*/
       #define fat_disk_buffer  fat_file_buffer         /*文件缓冲区与磁盘缓冲区共用*/
       #endif
       FAT_CMD_DEF  fat_cmd;                            /*FAT命令结构体*/
STATIC UINT8  xdata f[11];                              /*文件名处理缓冲区*/
STATIC UINT8  idata fat_type_sign;                      /*FAT类型1-FAT12,2-FAT16,3-FAT32*/
STATIC BOOL         fat_disk_end_bit;                   /*磁盘空间是否用完*/

/*文件使用参数*/
STATIC UINT8  idata fat_dir_all_l;                      /*打开文件所处目录深度*/
STATIC UINT8  idata fat_dir_now_l;                      /*当前所处深度*/
STATIC BOOL         fat_dir_full_bit;                   /*当前目录是否满标志*/
STATIC BOOL         fat_dir_fdelete_bit;                /*在此目录下发现删除文件*/

       UINT32 idata fat_file_length;                    /*文件长度*/
       UINT8  idata fat_file_attr;                      /*文件属性*/
STATIC BOOL         fat_file_open_bit;                  /*文件是否打开标志位*/
STATIC UINT32 xdata fat_start_cluster;                  /*文件或目录当前所处簇*/
STATIC UINT8  xdata fat_file_sect_offset;               /*此值*32为在此扇区的偏移量*/
STATIC UINT32 xdata fat_file_dir_sector;                /*文件目录项所处扇区*/
       #if F_EN_LONG_NAME ==1
       UINT8  xdata fat_long_name_buf[F_LNAME_BUF_LEN]; /*长文件名UNICODE存放缓冲区,用于显示等*/
       UINT8  idata fat_gath_name_sign;                 /*收集长文件名状态标志位*/
       #endif
/*结构体数组使用全局变量*/
STATIC fat_chain_def chain[FAT_CHAIN_LENGTH];           /*有用簇链缓冲区*/
STATIC UINT8  idata fat_last_chain_index;               /*在该文件或目录簇链的最后一个索引*/

STATIC UINT8  idata fat_chain_index;                    /*在当前簇链的索引*/
STATIC UINT8  idata fat_count_offset_cluster;           /*在连续簇的偏移*/
STATIC UINT8  data  fat_count_offset_sector;            /*纪录当前簇里读取扇区偏移*/

STATIC UINT32 xdata  fat_current_sect;                  /*当前所处扇区*/
       #if F_EN_BYTE ==1
STATIC UINT16 xdata fat_sector_byte_offset;             /*在字节方式操作时,在当前扇区的偏移量*/
STATIC BOOL         fat_in_byte_bit;                    /*第一次进入字节读写函数标志位*/
       #endif
/*对内申明提供函数*/
#if F_EN_WRITE ==1
UINT8 fat_fdelete(void);
STATIC UINT8 fat_get_space(BOOL con_bit);
STATIC UINT8 fat_update(BOOL up_mode);
#endif

#if F_EN_LONG_NAME ==1
STATIC UINT32 ini_chain_arry(BOOL mode);
#endif
/*枚举文件回调函数*/
#if F_EN_ENUM_BACK ==1
void file_enum_call_back(void)
{
    fat_file_length++;                                  /*枚举序号加一*/
    //com_prints(&fat_cmd.open.buffer,1);                 /*处理搜索到的文件名,在此为从串口发送出去*/
}
#endif
/******************************************************************************/

/*对外申明全局变量及函数*/
/******************************************************************************/
#else
/*对外申明全局变量*/
extern FAT_CMD_DEF  fat_cmd;
extern UINT32 idata fat_file_length;
extern UINT8  idata fat_file_attr;
extern UINT8  xdata fat_file_buffer[FAT_FILE_BUF_LEN];

#if F_EN_LONG_NAME ==1
extern UINT8  xdata fat_long_name_buf[F_LNAME_BUF_LEN];
extern UINT8  idata fat_gath_name_sign;
#endif

/*申明对外提供函数*/
extern UINT8 fat_init(void);                            /*FAT文件系统初始化*/
extern UINT8 fat_fopen(void);                           /*打开文件函数*/
extern UINT8 fat_fread(void);                           /*读文件数据到缓冲区*/
extern UINT8 fat_locate_sector(void);                   /*偏移扇区*/
extern UINT8 fat_fclose(void);                          /*关闭文件*/

#if F_EN_WRITE ==1
extern UINT8 fat_fcreate(BOOL c_mode);                  /*创建文件*/
extern UINT8 fat_fmodify(void);                         /*修改文件属性*/
extern UINT8 fat_fwrite(void);                          /*写数据到磁盘*/
extern UINT8 fat_fdelete(void);                         /*删除文件*/
extern UINT8 fat_create_dir(void);                      /*创建目录*/
#endif

#if F_EN_BYTE ==1
extern UINT8 fat_locate_byte(void);                     /*从文件开始偏移字节*/
extern UINT8 fat_byte_read(void);                       /*字节读取*/
#if F_EN_WRITE ==1
extern UINT8 fat_byte_write(void);                      /*字节方式写入*/
#endif
#endif

#endif                                                  /*PRODUCE_LOCAL_VARIABLES*/
/******************************************************************************/
#ifdef __cplusplus
}
#endif                                                  /*__cplusplus*/
#endif                                                  /*FAT_H*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -