?? fat.h
字號:
struct
{
UINT32 byte32; /*字節(jié)偏移 0XFFFFFFFF則到文件最后*/
} blocate;
struct
{
UINT8 count; /*輸入要讀取的字節(jié)數(shù),返回實際讀取字節(jié)數(shù)*/
UINT8 buffer[ FAT_CMD_BUF_LEN-1 ];
} bread;
struct
{
UINT8 count; /*字節(jié)寫入*/
UINT8 buffer[ FAT_CMD_BUF_LEN-1 ];
} bwrite;
struct
{
UINT32 total_sector; /*當(dāng)前磁盤的(文件存放)總扇區(qū)數(shù)*/
UINT32 free_sector; /*當(dāng)前磁盤的(文件存放)剩余可寫扇區(qū)數(shù)*/
UINT8 fat_type; /*當(dāng)前磁盤的FAT類型*/
} query;
}CMD_STRUCT;
typedef CMD_STRUCT FAT_CMD_DEF;
typedef struct
{
UINT32 cluster; /*開始簇號*/
UINT8 number; /*此簇號開始有幾個連續(xù)的簇*/
}fat_chain; /*用于構(gòu)建簇鏈表*/
typedef fat_chain fat_chain_def;
#define MAX_NUMBER UCHAR_MAX /*number所允許的最大數(shù)值*/
#ifdef PRODUCE_LOCAL_VARIABLES
/*磁盤基礎(chǔ)特性全局變量*/
STATIC BOOL1 fat_bpb_num_fats; /*F_TRUE: 2 FATs - F_FALSE: 1 FAT*/
UINT16X fat_sector_size; /*存放扇區(qū)的字節(jié)數(shù)*/
STATIC UINT8X fat_sec_perclus; /*每個簇占用扇區(qū)數(shù)*/
STATIC UINT32X fat_start_sector; /*第一個FAT表開始扇區(qū)地址*/
STATIC UINT32X fat_count_fat_sector; /*存放一個FAT表占用扇區(qū)數(shù)*/
STATIC UINT32X fat_total_clusters; /*存放磁盤總的簇數(shù)*/
STATIC UINT32X fat_data_start_sector; /*存放數(shù)據(jù)區(qū)開始扇區(qū)地址*/
STATIC UINT32X fat_dir_sector_clus32; /*FAT12/16為根目錄開始扇區(qū)數(shù),FAT32為根目錄開始簇號*/
STATIC UINT8X fat_type_sign; /*FAT類型1-FAT12,2-FAT16,3-FAT32*/
STATIC UINT32X fat_free_clusters; /*磁盤空簇數(shù)*/
/*以下三個變量用于FAT32*/
#if(F_USE_FAT32 == 1)
STATIC UINT16X fat_fsinfo_sector; /*FSInfo所在扇區(qū)數(shù)*/
STATIC UINT32X fat_fsi_free_count; /*剩下可用空簇(用于FAT32)*/
STATIC UINT32X fat_fsi_nxt_free; /*從那里找剩余的空簇*/
#endif
/*文件使用參數(shù)*/
UINT32X fat_file_length; /*文件長度*/
UINT8X fat_file_attr; /*文件屬性*/
STATIC UINT8X f[11]; /*文件名處理緩沖區(qū)*/
STATIC BOOL1 fat_all_gather_bit; /*文件所有數(shù)據(jù)收集完成標(biāo)志*/
STATIC BOOL1 fat_dir_full_bit; /*當(dāng)前目錄是否滿標(biāo)志*/
STATIC BOOL1 fat_dir_fdelete_bit; /*在此目錄下發(fā)現(xiàn)刪除文件*/
STATIC BOOL1 fat_file_open_bit; /*文件是否打開標(biāo)志位*/
STATIC BOOL1 fat_disk_end_bit; /*磁盤空間是否用完*/
STATIC UINT8X fat_dir_all_l; /*打開文件所處目錄深度*/
STATIC UINT8X fat_dir_now_l; /*當(dāng)前所處深度*/
STATIC UINT32X fat_start_cluster; /*文件或目錄當(dāng)前所處簇*/
STATIC UINT8X fat_file_sect_offset; /*此值*32為在此扇區(qū)的偏移量*/
STATIC UINT32X fat_file_dir_sector; /*文件目錄項所處扇區(qū)*/
/*結(jié)構(gòu)體數(shù)組使用全局變量*/
STATIC UINT8X fat_last_chain_index; /*在該文件或目錄簇鏈的最后一個索引*/
STATIC UINT8X fat_chain_index; /*在當(dāng)前簇鏈的索引*/
STATIC UINT8X fat_count_offset_cluster; /*在連續(xù)簇的偏移*/
STATIC UINT8X fat_count_offset_sector; /*紀(jì)錄當(dāng)前簇里讀取扇區(qū)偏移*/
STATIC UINT32X fat_current_sect; /*當(dāng)前所處扇區(qū)*/
#if(F_EN_BYTE ==1)
STATIC BOOL1 fat_byte_mode; /*TRUE處在字節(jié)模式 否則扇區(qū)方式*/
STATIC BOOL1 fat_in_byte_bit; /*第一次進(jìn)入字節(jié)讀寫函數(shù)標(biāo)志位*/
STATIC UINT16X fat_sector_byte_offset; /*在字節(jié)方式操作時,在當(dāng)前扇區(qū)的偏移量*/
#endif
STATIC PUINT8 fat_buf_pointer; /*文件緩沖區(qū)開始指針*/
/*對內(nèi)申明提供函數(shù)*/
#if(F_EN_WRITE ==1)
STATIC UINT8 fat_get_space(BOOL1 con_bit);
STATIC UINT8 fat_update(BOOL1 up_mode);
UINT8 fat_fdelete(void);
#endif
/*對內(nèi)申明,在外產(chǎn)生的全局變量*/
extern FAT_CMD_DEF fat_cmd;
extern fat_chain_def chain[FAT_CHAIN_LENGTH];
extern UINT8 cmd_buf_len; /*對內(nèi)申明得到命令緩沖區(qū)的長度*/
extern UINT16 file_buf_len; /*對內(nèi)申明得到文件緩沖區(qū)長度*/
extern UINT8 fat_chn_len; /*對內(nèi)申明得到簇鏈的深度*/
#if F_EN_DISK_BUF ==1 /*調(diào)用對外申明的文件緩沖區(qū)及磁盤緩沖區(qū)*/
extern UINT8X fat_file_buffer[ ];
extern UINT8X fat_disk_buffer[ ];
#else
extern UINT8X fat_file_buffer[ ];
#define fat_disk_buffer fat_file_buffer
#endif
/*枚舉文件回調(diào)函數(shù)*/
#if(F_EN_ENUM_BACK ==1)
void file_enum_call_back(void)
{
fat_file_length++; /*枚舉序號加一*/
//com_prints(&fat_cmd.open.buffer,1); /*處理搜索到的文件名,在此為從串口發(fā)送出去*/
}
#endif
/******************************************************************************/
/*對外申明全局變量及函數(shù)*/
/******************************************************************************/
#else
/*對外申明全局變量*/
extern FAT_CMD_DEF fat_cmd;
extern UINT32X fat_file_length;
extern UINT8X fat_file_attr;
extern UINT8X fat_file_buffer[ ];
extern UINT16X fat_sector_size;
#if(F_EN_LONG_NAME ==1)
extern UINT8X fat_long_name_buf[ ];
extern UINT8X fat_get_name_sign;
#endif
/*申明對外提供函數(shù)*/
extern UINT8 fat_init(void); /*FAT文件系統(tǒng)初始化*/
extern UINT8 fat_fopen(void); /*打開文件函數(shù)*/
extern UINT8 fat_fread(void); /*讀文件數(shù)據(jù)到緩沖區(qū)*/
extern UINT8 fat_freadx(void); /*讀文件數(shù)據(jù)到任意位置*/
extern UINT8 fat_locate_sector(void); /*偏移扇區(qū)*/
extern UINT8 fat_fclose(void); /*關(guān)閉文件*/
extern UINT8 fat_disk_query( void ); /*查詢磁盤屬性*/
#if(F_EN_WRITE ==1)
extern UINT8 fat_fcreate(Bool c_mode); /*創(chuàng)建文件*/
extern UINT8 fat_fmodify(void); /*修改文件屬性*/
extern UINT8 fat_fwrite(void); /*寫數(shù)據(jù)到磁盤*/
extern UINT8 fat_fwritex( void ); /*寫任意位置數(shù)據(jù)到磁盤*/
extern UINT8 fat_fdelete(void); /*刪除文件*/
extern UINT8 fat_create_dir(void); /*創(chuàng)建目錄*/
#endif
#if(F_EN_BYTE ==1)
extern UINT8 fat_locate_byte(void); /*從文件開始偏移字節(jié)*/
extern UINT8 fat_byte_read(void); /*字節(jié)讀取*/
#if(F_EN_WRITE ==1)
extern UINT8 fat_byte_write(void); /*字節(jié)方式寫入*/
#endif
#endif
#ifdef FAT_INI_VAR /*初始化FAT使用緩沖區(qū)變量*/
UINT8 cmd_buf_len = FAT_CMD_BUF_LEN; /*得到命令緩沖區(qū)長度*/
UINT16 file_buf_len = FAT_FILE_BUF_LEN; /*得到文件緩沖區(qū)長度*/
UINT8 fat_chn_len = FAT_CHAIN_LENGTH; /*得到簇鏈的深度*/
#if F_EN_LONG_NAME ==1
UINT8X fat_long_name_buf[F_LNAME_BUF_LEN]; /*長文件名UNICODE存放緩沖區(qū),用于顯示等*/
UINT8X fat_get_name_sign; /*收集長文件名狀態(tài)標(biāo)志位*/
#endif
#if F_EN_DISK_BUF ==1
UINT8X fat_file_buffer[ FAT_FILE_BUF_LEN ]; /*文件緩沖區(qū)*/
UINT8X fat_disk_buffer[ FAT_SECTOR_SIZE_DEF ]; /*磁盤緩沖區(qū)*/
#else /*不允許在文件尾部添加數(shù)據(jù)時,文件緩沖區(qū)與磁盤緩沖共用*/
UINT8X fat_file_buffer[ FAT_FILE_BUF_LEN ]; /*文件緩沖區(qū)*/
#define fat_disk_buffer fat_file_buffer /*文件緩沖區(qū)與磁盤緩沖區(qū)共用*/
#endif
FAT_CMD_DEF fat_cmd; /*FAT命令結(jié)構(gòu)體*/
fat_chain_def chain[ FAT_CHAIN_LENGTH ]; /*有用簇鏈緩沖區(qū)*/
#endif
#endif /*PRODUCE_LOCAL_VARIABLES*/
/******************************************************************************/
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*FAT_H*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -