📄 minifs.h
字号:
/*
;*****************************************************************************************************
;* Copyright (c) 2006 by JiaoJinXing.
;* All rights reserved.
;*
;*---- 文件信息 --------------------------------------------------------------------------------------
;* 文 件 名 : minifs.h
;* 创 建 人 : 焦进星
;* 描 述 : 扇区缓存器文件
;*
;*---- 历史版本信息 ----------------------------------------------------------------------------------
;* 日 期 : 2008年 12 月 15 日
;* 创 建 人 : 焦进星
;* 描 述 : 建立版本 V1.0.0
;*
;*---- 联系方式 --------------------------------------------------------------------------------------
;* Email : wyoujtg@163.com
;* Web : http://wyoujtg.blog.163.com
;*****************************************************************************************************
;*/
#ifndef MINIFS_H
#define MINIFS_H
/*
;*****************************************************************************************************
;* 描 述 : 平台配置
;*****************************************************************************************************
;*/
//#define WINDOWS
#define AVR_MMC
#ifdef WINDOWS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DISK_MOUNT_FILE "simdisk.dat"
#endif
#ifdef AVR_MMC
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>#endif
/*
;*****************************************************************************************************
;* 描 述 : 文件系统配置
;*****************************************************************************************************
;*/
#define MAX_FILE_OPEN 1
/*
;*****************************************************************************************************
;* 描 述 : 定义数据类型
;*****************************************************************************************************
;*/
#ifdef AVR_MMC
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#endif
#ifdef WINDOWS
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef FALSE
#define FALSE 0
#endif
/*
;*****************************************************************************************************
;* 描 述 : 小端访问
;*****************************************************************************************************
;*/
#define GET_UINT16(buf, x) ( ((uint16)buf[x+0]) | ((uint16)buf[x+1]<<8) )
#define SET_UINT16(buf, x, v) { buf[x+0] = (uint8)((v)&0xff);\
buf[x+1] = (uint8)((v>>8)&0xff); }
#define GET_UINT32(buf, x) ( ((uint32)buf[x+0]) | ((uint32)buf[x+1]<<8) | ((uint32)buf[x+2]<<16) | ((uint32)buf[x+3]<<24) )
/*
;*****************************************************************************************************
;* 描 述 : 定义 BPB 结构
;*****************************************************************************************************
;*/
#define BPB_BytsPerSec 11
#define BPB_SecPerClus 13
#define BPB_RsvdSecCnt 14
#define BPB_NumFATs 16
#define BPB_RootEntCnt 17
#define BPB_TotSec16 19
#define BPB_FATSz16 22
#define BPB_TotSec32 32
#define BPB_FATSz32 36
#define BPB_RootClus 44
#define BPB_FSInfo 48
/*
;*****************************************************************************************************
;* 描 述 : 定义簇类型
;*****************************************************************************************************
;*/
#define NEW_CLUS_CHAIN 0
#define EMPTY_CLUS 0
#define EMPTY_CLUS_1 1
#define BAD_CLUS 0xfff7
#define EOF_CLUS_1 0xfff8
#define EOF_CLUS_END 0xffff
/*
;*****************************************************************************************************
;* 描 述 : 定义目录项数据结构
;*****************************************************************************************************
;*/
typedef struct _FDT
{
char Name[11]; /* 文件名 */
uint8 Attr; /* 文件属性 */
uint16 FstClusLO; /* 起始簇 */
uint32 FileSize; /* 文件大小 */
} FDT;
/*
;*****************************************************************************************************
;* 描 述 : 定义文件信息结构体
;*****************************************************************************************************
;*/
typedef struct FileManageInfo
{
FDT fFDT; /* 目录项数据结构 */
uint8 Flag; /* 一些标志 */
uint16 FdtIndex; /* 文件目录项索引 */
uint16 CurClus; /* 当前簇号 */
uint32 Offset; /* 文件指针偏移量 */
} *M_FILE;
/*
;*****************************************************************************************************
;* 描 述 : 文件系统信息变量
;*****************************************************************************************************
;*/
#ifdef IN_FAT16
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN uint8 FS_SecPerClus;
EXTERN uint8 FS_FATStartSec;
EXTERN uint16 FS_MaxClus;
EXTERN uint16 FS_RootEntCnt;
EXTERN uint16 FS_RootDirStartSec;
EXTERN uint32 FS_DataStartSec;
/*
;*****************************************************************************************************
;* 描 述 : 定义一些有意义的标识
;*****************************************************************************************************
;*/
#define FDT_NO_FOUND FS_RootEntCnt
#define MAX_FDT_NUM FS_RootEntCnt
#define FILE_OPEN 0x01
/*
;*****************************************************************************************************
;* 函数名称 : Cache_Init
;* 描 述 : 扇区缓存器初始化
;* 输 入 : 无
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void Cache_Init(void);
/*
;*****************************************************************************************************
;* 函数名称 : OpenSector
;* 描 述 : 打开指定扇区
;* 输 入 : SecIndex: 扇区号
;*
;* 输 出 : 扇区读写地址
;*****************************************************************************************************
;*/
uint8 *OpenSector(uint32 SecIndex);
/*
;*****************************************************************************************************
;* 函数名称 : WriteSector
;* 描 述 : 写已打开的扇区
;* 输 入 : 无
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void WriteSector(void);
/*
;*****************************************************************************************************
;* 函数名称 : CacheWriteBack
;* 描 述 : 回写已打开的扇区
;* 输 入 : 无
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 CacheWriteBack(void);
/*
;*****************************************************************************************************
;* 函数名称 : Disk_Init
;* 描 述 : 磁盘初始化
;* 输 入 : 无
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 Disk_Init(void);
/*
;*****************************************************************************************************
;* 函数名称 : Init_IDE
;* 描 述 : 初始化IDE
;* 输 入 : 无
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 Init_IDE(void);
/*
;*****************************************************************************************************
;* 函数名称 : ReadIDESector
;* 描 述 : 读IDE指定扇区
;* 输 入 : SecIndex: 扇区号; Buf: 扇区内容存入的地址
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 ReadIDESector(uint32 SecIndex, uint8 *Buf);
/*
;*****************************************************************************************************
;* 函数名称 : WriteIDESector
;* 描 述 : 写IDE指定扇区
;* 输 入 : SecIndex: 扇区号; Buf: 要写入的内容
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 WriteIDESector(uint32 SecIndex, uint8 *Buf);
/*
;*****************************************************************************************************
;* 函数名称 : GetNextClus
;* 描 述 : 获得指定簇的下一簇号
;* 输 入 : ClusIndex: 簇号
;*
;* 输 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 GetNextClus(uint16 ClusIndex);
/*
;*****************************************************************************************************
;* 函数名称 : SetNextClus
;* 描 述 : 设置指定簇的下一簇号
;* 输 入 : ClusIndex: 簇号, Value: 下一簇号
;*
;* 输 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 SetNextClus(uint16 ClusIndex, uint16 Value);
/*
;*****************************************************************************************************
;* 函数名称 : AddNewClus
;* 描 述 : 为指定簇链增加一个簇
;* 输 入 : ClusIndex: 簇号
;*
;* 输 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 AddNewClus(uint16 ClusIndex);
/*
;*****************************************************************************************************
;* 函数名称 : DelClusChain
;* 描 述 : 删除簇链
;* 输 入 : ClusIndex: 簇号
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void DelClusChain(uint16 CurClus);
/*
;*****************************************************************************************************
;* 函数名称 : ReadRootFDTInfo
;* 描 述 : 读取指定根目录项
;* 输 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 ReadRootFDTInfo(uint16 FDTIndex, FDT *pFDT);
/*
;*****************************************************************************************************
;* 函数名称 : WriteRootFDTInfo
;* 描 述 : 写指定根目录项
;* 输 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 WriteRootFDTInfo(uint16 FDTIndex, FDT *pFDT);
/*
;*****************************************************************************************************
;* 函数名称 : GetFreeRootFDT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -