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

📄 fat16.lst

📁 液晶显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   FAT16                                                                 08/25/2007 14:05:33 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FAT16
OBJECT MODULE PLACED IN FAT16.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE FAT16.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <stdio.h>
   2          #include "FAT16.h"
*** WARNING C245 IN LINE 5 OF FAT16.H: unknown #pragma, line ignored
*** WARNING C245 IN LINE 58 OF FAT16.H: unknown #pragma, line ignored
   3          
   4          uint8 BUFFER[512];
   5          
   6          uint16 BPB_BytesPerSec;
   7          uint8 BPB_SecPerClus;
   8          uint16 BPB_RsvdSecCnt;
   9          uint8 BPB_NumFATs;
  10          uint16 BPB_RootEntCnt;
  11          uint16 BPB_TotSec16;
  12          uint16 BPB_FATSz16;
  13          uint32 BPB_HiddSec;
  14          
  15          //********************************************************************************************
  16          //读一个扇区
  17          void ReadBlock(uint32 LBA)
  18          //********************************************************************************************
  19          {
  20   1              return;
  21   1      }
*** WARNING C280 IN LINE 17 OF FAT16.C: 'LBA': unreferenced local variable
  22          
  23          //********************************************************************************************
  24          //写一个扇区
  25          void WriteBlock(uint32 LBA)
  26          //********************************************************************************************
  27          {
  28   1              return;
  29   1      }
*** WARNING C280 IN LINE 25 OF FAT16.C: 'LBA': unreferenced local variable
  30          
  31          //********************************************************************************************
  32          void CopyBytes(void* S, void* D, uint16 size)
  33          //********************************************************************************************
  34          {
  35   1              uint8 *s = S, *d = D;
  36   1              uint16 i;
  37   1              for(i = 0; i < size; i++)
  38   1                      *d++ = *s++;
  39   1      }
  40          
  41          //********************************************************************************************
  42          uint8 IsEqual(void* A, void* B, uint8 Size)
  43          //********************************************************************************************
  44          {
  45   1              uint8 i, *a = A, *b = B;
  46   1              for(i = 0; i < Size; i++)
  47   1                      if(a[i] != b[i])
  48   1                              return 0;
  49   1              return 1;
  50   1      }
  51          
C51 COMPILER V7.50   FAT16                                                                 08/25/2007 14:05:33 PAGE 2   

  52          //********************************************************************************************
  53          void EmptyBytes(void* D, uint16 size)
  54          //********************************************************************************************
  55          {
  56   1              uint16 i;
  57   1              uint8* data = (uint8*)D;
*** ERROR C141 IN LINE 57 OF FAT16.C: syntax error near '='
  58   1              for(i = 0; i < size; i++)
  59   1              {
  60   2                      *data++ = 0;
*** ERROR C141 IN LINE 60 OF FAT16.C: syntax error near 'data'
  61   2              }
  62   1      }
  63          
  64          //********************************************************************************************
  65          //读取BPB数据结构
  66          void ReadBPB(void)
  67          //********************************************************************************************
  68          {
  69   1              FAT_BPB* BPB = (FAT_BPB*)BUFFER;
  70   1              ReadBlock(0);
  71   1      
  72   1              //获取参数
  73   1              BPB_BytesPerSec = BPB->BPB_BytesPerSec;
  74   1              BPB_SecPerClus = BPB->BPB_SecPerClus;
  75   1              BPB_RsvdSecCnt = BPB->BPB_RsvdSecCnt;
  76   1              BPB_NumFATs = BPB->BPB_NumFATs;
  77   1              BPB_RootEntCnt = BPB->BPB_RootEntCnt;
  78   1              BPB_TotSec16 = BPB->BPB_TotSec16;
  79   1              BPB_FATSz16 = BPB->BPB_FATSz16;
  80   1              BPB_HiddSec = BPB->BPB_HiddSec;
  81   1      
  82   1      }
  83          
  84          //********************************************************************************************
  85          //获取根目录开始扇区号
  86          uint32 DirStartSec(void)
  87          //********************************************************************************************
  88          {
  89   1              return BPB_RsvdSecCnt + BPB_NumFATs * BPB_FATSz16;
  90   1      }
  91          
  92          //********************************************************************************************
  93          //获取数据区开始扇区号
  94          uint32 DataStartSec(void)
  95          //********************************************************************************************
  96          {
  97   1              return (uint32)(DirStartSec() + BPB_RootEntCnt * 32 / BPB_BytesPerSec);
  98   1      }
  99          
 100          //********************************************************************************************
 101          //目录项占用的扇区数
 102          uint16 GetDirSecCount(void)
 103          //********************************************************************************************
 104          {
 105   1              return BPB_RootEntCnt * 32 / 512;
 106   1      }
 107          
 108          //********************************************************************************************
 109          //获取一个簇的开始扇区
 110          uint32 ClusConvLBA(uint16 ClusID)
 111          //********************************************************************************************
C51 COMPILER V7.50   FAT16                                                                 08/25/2007 14:05:33 PAGE 3   

 112          {
 113   1              return DataStartSec() + BPB_SecPerClus * (ClusID - 2);
 114   1      }
 115          
 116          //********************************************************************************************
 117          //读取文件分配表的指定项
 118          uint16 ReadFAT(uint16 Index)
 119          //********************************************************************************************
 120          {
 121   1              uint16 *RAM = (uint16*)BUFFER;
 122   1              ReadBlock(BPB_RsvdSecCnt + Index / 256);
 123   1              return RAM[Index % 256];
 124   1      }
 125          
 126          //********************************************************************************************
 127          //写文件分配表的指定项
 128          void WriteFAT(uint16 Index, uint16 Value)
 129          //********************************************************************************************
 130          {
 131   1              uint16 *RAM = (uint16*)BUFFER;
 132   1              uint32 SecID;
 133   1              SecID = BPB_RsvdSecCnt + Index / 256;
 134   1              ReadBlock(SecID);
 135   1              RAM[Index % 256] = Value;
 136   1              WriteBlock(SecID);
 137   1      }
 138          
 139          //********************************************************************************************
 140          //获取根目录中可以使用的一项
 141          uint16 GetEmptyDIR()
 142          //********************************************************************************************
 143          {
 144   1              uint16 DirSecCut, DirStart, i, m, ID = 0;
 145   1              DirSecCut = GetDirSecCount();
 146   1              DirStart = DirStartSec();
 147   1              for(i = 0; i < DirSecCut; i++)
 148   1              {
 149   2                      ReadBlock(DirStart + i);
 150   2                      for(m = 0; m < 16; m++)
 151   2                      {
 152   3                              if((BUFFER[m * 32] == 0) || (BUFFER[m * 32] == 0xe5))
 153   3                                      return ID;
 154   3                              else
 155   3                                      ID++;
 156   3                      }
 157   2              }
 158   1              return ID;
 159   1      }
 160          
 161          //********************************************************************************************
 162          //获得和文件名对应的目录项
 163          uint8 GetFileID(uint8 Name[11], DIR* ID)
 164          //********************************************************************************************
 165          {
 166   1              uint16 DirSecCut, DirStart, i, m;
 167   1              DirSecCut = GetDirSecCount();
 168   1              DirStart = DirStartSec();
 169   1              for(i = 0; i < DirSecCut; i++)
 170   1              {
 171   2                      ReadBlock(DirStart + i);
 172   2                      for(m = 0; m <16; m++)
 173   2                      {
C51 COMPILER V7.50   FAT16                                                                 08/25/2007 14:05:33 PAGE 4   

⌨️ 快捷键说明

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