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

📄 fatmountpartition.lst

📁 FAT32文件系统在51单片机上实现
💻 LST
📖 第 1 页 / 共 2 页
字号:
  68      =2  #define ClusterToSector(X)                      FAT.ClusSec + (X - 2) * FAT.SecPerClus
  69      =2  
  70      =2  struct StorageMediaStr
  71      =2  {
  72      =2          WORD    BytesPerSec;                    //每扇区字节数
  73      =2          DWORD   TotalSectors;                   //总扇区数
  74      =2          BYTE    TotalPartitions;                //分区数
  75      =2          BYTE    CurrentPartition;               //当前分区
  76      =2          BYTE    (*ReadSector)(DWORD Sector,BYTE *Buffer);
  77      =2          BYTE    (*WriteSector)(DWORD Sector,BYTE *Buffer);
  78      =2  };
  79      =2  
  80      =2  struct BootSecFAT16Str                                  //引导扇区   FAT16  扩展结构
  81      =2  {
  82      =2          BYTE    BS_DrvNum;
  83      =2          BYTE    BS_Reserved1;
  84      =2          BYTE    BS_BootSig;
  85      =2          DWORD   BS_VolID;
  86      =2          char    BS_VolLab[11];
  87      =2          char    BS_FilSysType[8];
  88      =2  };
  89      =2  
  90      =2  struct BootSecFAT32Str                                  //引导扇区   FAT  扩展结构
  91      =2  {
  92      =2          DWORD   BPB_FATSz32;                    //FAT扇区总数
  93      =2          WORD    BPB_ExtFlags;
  94      =2          WORD    BPB_FSVer;
  95      =2          DWORD   BPB_RootClus;                   //根目录开始的簇
  96      =2          WORD    BPB_FSInfo;
  97      =2          WORD    BPB_BkBootSec;
  98      =2          char    BPB_Reserved[12];
  99      =2          BYTE    BS_DrvNum;
 100      =2          BYTE    BS_Reserved1;
 101      =2          BYTE    BS_BootSig;
C51 COMPILER V7.50   FATMOUNTPARTITION                                                     11/20/2006 15:49:25 PAGE 6   

 102      =2          DWORD   BS_VolID;
 103      =2          char    BS_VolLab[11];
 104      =2          char    BS_FilSysType[8];
 105      =2  };
 106      =2  
 107      =2  struct BootSecStr                                               //引导扇区结构
 108      =2  {
 109      =2          BYTE    BS_jmpBoot[3];
 110      =2          BYTE    BS_OEMName[8];
 111      =2          WORD    BPB_BytesPerSec;                //每扇区字节数  512
 112      =2          BYTE    BPB_SecPerClus;                 //每簇扇区数    1 2 4 8 16 32 64 128
 113      =2          WORD    BPB_RsvdSecCnt;                 //保留扇区数    0x20
 114      =2          BYTE    BPB_NumFATs;                    //FAT表个数             2
 115      =2          WORD    BPB_RootEntCnt;         
 116      =2          WORD    BPB_TotSec16;
 117      =2          BYTE    BPB_Media;
 118      =2          WORD    BPB_FATSz16;
 119      =2          WORD    BPB_SecPerTrk;
 120      =2          WORD    BPB_NumHeads;
 121      =2          DWORD   BPB_HiddSec;
 122      =2          DWORD   BPB_TotSec32;
 123      =2          union   FATUni
 124      =2          {
 125      =2                  struct BootSecFAT32Str  F32;
 126      =2                  struct BootSecFAT16Str  F16;
 127      =2          }FAT;
 128      =2  
 129      =2  };
 130      =2  
 131      =2  struct DPTStr                           //分区表结构
 132      =2  {
 133      =2          BYTE    BootFlag;
 134      =2          BYTE    CHSBegin[3];
 135      =2          BYTE    TypeCode;
 136      =2          BYTE    CHSEnd[3];
 137      =2          DWORD   LBABegin;
 138      =2          DWORD   CntSec;
 139      =2  };
 140      =2  
 141      =2  struct sDPTStr                          //简化的分区表
 142      =2  {
 143      =2          BYTE    FATType;
 144      =2          DWORD   LBABegin;
 145      =2          DWORD   CntSec;
 146      =2  };
 147      =2  
 148      =2  struct FAT32FSInfoStr           //FAT32扩展信息结构
 149      =2  {
 150      =2          DWORD   LeadSig;
 151      =2          BYTE    Reserved1[480];
 152      =2          DWORD   StrucSig;
 153      =2          DWORD   FreeCount;
 154      =2          DWORD   NxtFree;
 155      =2          BYTE    Reserved2[12];
 156      =2          DWORD   TrailSig;
 157      =2  };
 158      =2  
 159      =2  struct FATSDirStr                       //FAT目录结构 短文件名
 160      =2  {
 161      =2          CHAR    Name[11];
 162      =2          BYTE    Attr;
 163      =2          BYTE    NTRes;
C51 COMPILER V7.50   FATMOUNTPARTITION                                                     11/20/2006 15:49:25 PAGE 7   

 164      =2          BYTE    CrtTimeTenth;
 165      =2          WORD    CrtTime;
 166      =2          WORD    CrtDate;
 167      =2          WORD    LstAccDate;
 168      =2          WORD    FstClusHI;
 169      =2          WORD    WrtTime;
 170      =2          WORD    WrtDate;
 171      =2          WORD    FstClusLO;
 172      =2          DWORD   FileSize;
 173      =2  };
 174      =2  
 175      =2  struct FATLDirStr                       //FAT目录结构 长文件名
 176      =2  {
 177      =2          BYTE    Ord;
 178      =2          BYTE    Name1[10];
 179      =2          BYTE    Attr;
 180      =2          BYTE    Type;
 181      =2          BYTE    Chksum;
 182      =2          BYTE    Name2[12];
 183      =2          WORD    FstClusLO;
 184      =2          BYTE    Name3[4];
 185      =2  };
 186      =2  
 187      =2  struct FATStr                                   //FAT参数表
 188      =2  {
 189      =2  //      BYTE    ClusSecCnt;                     //当前簇扇区计数
 190      =2          DWORD   CurrentDirectory;       //当前目录入口(簇号)
 191      =2          BYTE    SecPerClus;                     //每簇扇区数    1 2 4 8 16 32 64 128
 192      =2          DWORD   RootClus;                       //根目录开始的簇
 193      =2          BYTE    RootSectors;            //根目录占用的扇区数
 194      =2          DWORD   ClusSec;                        //簇开始的扇区
 195      =2          DWORD   FATSz;                          //FAT表大小(扇区)
 196      =2          DWORD   FATSec;                         //FAT表开始扇区
 197      =2          DWORD   FSISec;                         //FSI所在扇区
 198      =2          DWORD   FSIFreeCount;           //空闲簇数
 199      =2          DWORD   FSINxtFree;                     //空闲簇搜索指针
 200      =2  };
 201      =2  
 202      =2  struct FCBStr
 203      =2  {
 204      =2          CHAR    FileName[12];           //文件名
 205      =2          DWORD   Size;                           //文件大小
 206      =2          DWORD   FirstCluster;           //第一个簇
 207      =2          DWORD   LastCluster;            //最近一次读到的簇号
 208      =2          DWORD   ClusSecCnt;                     //当前簇扇区计数
 209      =2          DWORD   ByteCnt;                        //当前字节计数
 210      =2  };
 211      =2  
 212      =2  struct FATTableStr
 213      =2  {
 214      =2          DWORD   Sector;
 215      =2          union FATUin
 216      =2          {
 217      =2                  DWORD   F32[128];
 218      =2                  WORD    F16[256];
 219      =2                  BYTE    F12[512];
 220      =2          }FAT;
 221      =2  };
 222      =2  
 223      =2  struct FATClusterStr
 224      =2  {
 225      =2          BYTE    SecOffset;                              //扇区偏移量
C51 COMPILER V7.50   FATMOUNTPARTITION                                                     11/20/2006 15:49:25 PAGE 8   

 226      =2          DWORD   Sector;                         //扇区号
 227      =2          DWORD   Cluster;                        //簇号
 228      =2  };
 229      =2  
 230      =2  #ifndef _LIBRARY_DEFINE
           =2  xdata BYTE DiskBuffer[512];
           =2 
           =2  xdata struct StorageMediaStr StorageMedia;
           =2  xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
           =2  xdata struct FATStr FAT;
           =2  xdata struct FCBStr FCB[FAT_MAX_FCB];
           =2  xdata CHAR LongFileName[256]; 
           =2  xdata struct FATTableStr FATTable;
           =2  xdata struct DPTStr *DPT;                      //分区表结构指针
           =2  xdata struct BootSecStr *BOOTSEC;              //引导扇区结构指针
           =2  xdata struct FAT32FSInfoStr *FSI;              //FAT32扩展信息
           =2  xdata struct FATSDirStr *sDIR;         //FAT目录结构指针
           =2  xdata struct FATLDirStr *lDIR;         //FAT目录结构指针
           =2 #endif
 245      =2  #endif
 246      =2  
 247      =2  extern xdata BYTE DiskBuffer[512];
 248      =2  
 249      =2  extern xdata struct StorageMediaStr StorageMedia;
 250      =2  extern xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
 251      =2  extern xdata struct FATStr FAT;
 252      =2  extern xdata struct FCBStr FCB[FAT_MAX_FCB];
 253      =2  extern xdata CHAR LongFileName[256]; 
 254      =2  extern xdata struct FATTableStr FATTable;
 255      =2  extern xdata struct DPTStr *DPT;                //分区表结构指针
 256      =2  extern xdata struct BootSecStr *BOOTSEC;        //引导扇区结构指针
 257      =2  extern xdata struct FAT32FSInfoStr *FSI;        //FAT32扩展信息
 258      =2  extern xdata struct FATSDirStr *sDIR;           //FAT目录结构指针
 259      =2  extern xdata struct FATLDirStr *lDIR;           //FAT目录结构指针
 260      =2  
 261      =2  extern void FATInit(void);
 262      =2  extern BYTE FATSelectMedia(BYTE Media);
 263      =2  extern BYTE FATFindPartitions(void);
 264      =2  extern BYTE FATMountPartition(void);
 265      =2  extern BYTE FATMountVolumeID(BYTE Partition);
 266      =2  extern void FATGetPartLongName(struct FATLDirStr *ldp,CHAR *name);
 267      =2  extern DWORD FATDiskSize(void);
 268      =2  extern DWORD FATDiskFreeSize(void);
 269      =2  extern BYTE FATFindDIREntry(CHAR *DirName);
 270      =2  extern BYTE FAT32FindDIREntry(CHAR *DirName);
 271      =2  extern BYTE FAT16FindDIREntry(CHAR *DirName);
 272      =2  void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
 273      =2  extern BYTE FATChangeDirectory(CHAR *DirName);
 274      =2  extern BYTE FATListDirectory(void);
 275      =2  extern BYTE FAT32ListDirectory(void);
 276      =2  extern BYTE FAT16ListDirectory(void);
 277      =2  extern void FATNextCluster(DWORD *CurrentCluster);
 278      =2  extern BYTE FATGetDirName(WORD SecNum);
 279      =2  extern BYTE FATOpenFile(CHAR *filename);
 280      =2  extern void FATCloseFile(BYTE fp);
 281      =2  extern WORD FATReadFile(BYTE fp);
 282      =2  
  11      =1  
   3          #endif
   4          
   5          BYTE FATMountPartition(void);
   6          
C51 COMPILER V7.50   FATMOUNTPARTITION                                                     11/20/2006 15:49:25 PAGE 9   

   7          BYTE FATMountPartition(void)
   8          {
   9   1              register BYTE i,j=0;
  10   1              xdata DWORD MasterExtLBA,ExtLBA;
  11   1              bit Master=1,Ext=1;
  12   1      
  13   1              MasterExtLBA=0x00000000;
  14   1              ExtLBA=0x00000000;
  15   1      
  16   1              while(Ext)
  17   1              {
  18   2                      if (StorageMedia.ReadSector(ExtLBA,DiskBuffer)) {printf("I/O error");return(0);}                                //读MBR扇区
  19   2      //              IDEReadSector(ExtLBA,DiskBuffer);
  20   2                      Ext=0;
  21   2                      //检查MBR扇区标记
  22   2                      if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
  23   2                              {printf("55AA\n");      return(0);}                     //不正常的引导扇区标志
  24   2                      
  25   2                              //加载分区表
  26   2                      for(i=0;i<4;i++)
  27   2                      {
  28   3                              DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
*** WARNING C206 IN LINE 28 OF FATMOUNTPARTITION.C: 'MEMSwap32': missing function-prototype
*** ERROR C267 IN LINE 28 OF FATMOUNTPARTITION.C: 'MEMSwap32': requires ANSI-style prototype
  29   3                              DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
  30   3                              if (DPT[i].TypeCode==0x01||
  31   3                                      DPT[i].TypeCode==0x04||
  32   3                                      DPT[i].TypeCode==0x06||
  33   3                                      DPT[i].TypeCode==0x0b||
  34   3                                      DPT[i].TypeCode==0x0c||
  35   3                                      DPT[i].TypeCode==0x0e)                  //FAT 分区
  36   3                              {
  37   4                                      sDPT[j].LBABegin = DPT[i].LBABegin + ExtLBA;
  38   4                                      sDPT[j].CntSec = DPT[i].CntSec;
  39   4                                      j++;
  40   4                                      if (j==FAT_MAX_PARTITIONS) return(j);
  41   4                              }
  42   3                              else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f)          //扩展分区
  43   3                              {
  44   4                                      Ext=1;
  45   4                                      if (Master)
  46   4                                      {
  47   5                                              ExtLBA=DPT[i].LBABegin;
  48   5                                              MasterExtLBA=DPT[i].LBABegin;
  49   5                                              Master=~Master;
  50   5                                      }
  51   4                                      else
  52   4                                      {
  53   5                                              ExtLBA=MasterExtLBA+DPT[i].LBABegin;
  54   5                                      }
  55   4                              }
  56   3                      }
  57   2              }
  58   1              return(j);
  59   1      }

C51 COMPILATION COMPLETE.  4 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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