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

📄 fat.lst

📁 FAT32文件系统源码
💻 LST
字号:
C51 COMPILER V7.02a   FAT                                                                  12/22/2010 21:07:56 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE FAT
OBJECT MODULE PLACED IN fat.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fat.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "fat.h"
   2          
   3          unsigned char xdata  FAT32_Buffer[512]; //扇区数据读写缓冲区xdata
   4          struct FAT32_Init_Arg Init_Arg;        //初始化参数结构体实体
   5          struct FileInfoStruct FileInfo;   
   6          
   7          /*********************
   8          FAT32中读取扇区的函数
   9          返回对缓冲区的首地址buf
  10          *********************/
  11          unsigned char * FAT32_ReadSector(unsigned long LBA,unsigned char *buf)
  12          {
  13   1       MMC_get_data_LBA(LBA,512,buf);
  14   1       return buf;
  15   1      }
  16          /**********************
  17          FAT32中写扇区的函数
  18          返回0:写扇区成功
  19          返回非0:写扇区失败
  20          **********************/
  21          unsigned char FAT32_WriteSector(unsigned long LBA,unsigned char *buf)
  22          {
  23   1       return MMC_write_sector(LBA,buf);
  24   1      }
  25          
  26          /***********************
  27          将存储设备读出的数据由小端转为大端
  28          ***********************/
  29          unsigned long lb2bb(unsigned char *dat,unsigned char len)//
  30          {
  31   1       unsigned long temp=0;
  32   1       unsigned long fact=1;
  33   1       unsigned char i=0;
  34   1       for(i=0;i<len;i++)
  35   1       {
  36   2         temp+=dat[i]*fact;
  37   2         fact=fact<<8;
  38   2       }
  39   1        return temp;
  40   1      }
  41          /***************************
  42          查找BPB所在扇区号,这里固定为0扇区
  43          ***************************/
  44          unsigned long  FAT32_FindBPB()  //寻找BPB所在的扇区号
  45          {
  46   1       FAT32_ReadSector(0,FAT32_Buffer);
  47   1       return lb2bb(((((struct PartSector *)(FAT32_Buffer))->Part[0]).StartLBA),4); 
  48   1      }
  49          /***********************
  50          存储器的总容量,单位为M
  51          返回为Float型
  52          ************************/
  53          unsigned long FAT32_Get_Total_Size()//
  54          {
  55   1       FAT32_ReadSector(Init_Arg.BPB_Sector_No,FAT32_Buffer);
C51 COMPILER V7.02a   FAT                                                                  12/22/2010 21:07:56 PAGE 2   

  56   1       return ((float)(lb2bb((((struct FAT32_BPB *)(FAT32_Buffer))->BPB_TotSec32),4)))*0.0004883;
  57   1      }
  58          /*****************************
  59          文件系统初始化
  60          将BPB段的给类信息装入到BPB结构体当中
  61          ******************************/
  62          void FAT32_Init(struct FAT32_Init_Arg *arg)
  63          {
  64   1       struct FAT32_BPB *bpb=(struct FAT32_BPB *)(FAT32_Buffer);             //将数据缓冲区指针转为struct FAT32_
             -BPB 型指针
  65   1       arg->BPB_Sector_No   =FAT32_FindBPB();                                             //FAT32_FindBPB()可以

⌨️ 快捷键说明

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