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

📄 znfat.lst

📁 f340的MP3程序,通过SD卡读入解码器
💻 LST
📖 第 1 页 / 共 2 页
字号:
 144           - 函数属性:内部
 145           - 参数说明:cluster:要清空的簇的簇号
 146           - 返回说明:无
 147           **************************************************************************/
 148          #ifdef ZNFAT_EMPTY_CLUSTER        
              
              void znFAT_Empty_Cluster(UINT32 Cluster)
              {
               UINT32 iSec;
               UINT16 i;
               for(i=0;i<pArg->BytesPerSector;i++)
               {
                znFAT_Buffer[i]=0;
               }
               for(iSec=SOC(Cluster);iSec<SOC(Cluster)+pArg->SectorsPerClust;iSec++)
               {
                znFAT_WriteSector(iSec,znFAT_Buffer);
               }
              }
              
              #endif 
 165          /***********************************************************************
 166           - 功能描述:获取剩余容量
 167           - 隶属模块:znFAT文件系统模块
 168           - 函数属性:外部,使用户使用
 169           - 参数说明:无    
 170           - 返回说明:剩余容量,单位字节
 171           - 注:从FSInfo中读取空闲簇数,而从计算得到剩余的容量,单位字节
 172           ***********************************************************************/
 173          #ifdef znFAT_GET_REMAIN_CAP
              
              UINT32 znFAT_Get_Remain_Cap(void)
              {
               znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);
               if(((struct FSInfo *)znFAT_Buffer)->Free_Cluster[0]==0xff 
               && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[1]==0xff 
C51 COMPILER V8.09   ZNFAT                                                                 05/19/2011 23:29:42 PAGE 4   

               && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[2]==0xff 
               && ((struct FSInfo *)znFAT_Buffer)->Free_Cluster[3]==0xff)
               return pArg->Total_Size;
               else
               return LE2BE(((struct FSInfo *)znFAT_Buffer)->Free_Cluster,4)*pArg->SectorsPerClust*pArg->BytesPerSector;
             - 
              }
              
              #endif
 188          
 189          //--------------------------------------------
 190          
 191          /******************************************************************
 192           - 功能描述:将小字字符转为大写
 193           - 隶属模块:znFAT文件系统模块
 194           - 函数属性:内部
 195           - 参数说明:c:要转换为大写的字符            
 196           - 返回说明:要转换的字节的相应的大写字符
 197           - 注:只对小写字符有效,如果不是a~z的小写字符,将直接返回
 198           ******************************************************************/
 199          
 200          INT8 L2U(INT8 c)
 201          {
 202   1       if(c>='a' && c<='z') return c+'A'-'a';
 203   1       else return c;
 204   1      }
 205          
 206          /***********************************************************************
 207           - 功能描述:得到DBR所在的扇区号(如果没有MBR,则DBR就在0扇区)
 208           - 隶属模块:znFAT文件系统模块
 209           - 函数属性:内部
 210           - 参数说明:无     
 211           - 返回说明:DBR的扇区地址
 212           - 注:DBR中包含了很多有用的参数信息,因此正确定位DBR扇区的位置,是极为
 213                 重要的,后面将有专门的函数对DBR进行解析,正确解析DBR是实现znFAT的
 214                 基础
 215           ***********************************************************************/
 216          
 217          UINT16 znFAT_Find_DBR(void)
 218          {
 219   1       UINT16 sec_dbr;
 220   1       znFAT_ReadSector(0,znFAT_Buffer);
 221   1       if(znFAT_Buffer[0]!=0xeb) 
 222   1       {
 223   2        sec_dbr=LE2BE(((((struct PartSector *)(znFAT_Buffer))->Part[0]).StartLBA),4);
 224   2       }
 225   1       else
 226   1       {
 227   2        sec_dbr=0;
 228   2       }
 229   1       return sec_dbr;
 230   1      }
 231          
 232          /***********************************************************************
 233           - 功能描述:获取分区的总容量
 234           - 隶属模块:znFAT文件系统模块
 235           - 函数属性:外部,使用户使用
 236           - 参数说明:无     
 237           - 返回说明:分区容量值,单位为字节
 238           - 注:这里得到的总容量是znFAT分区的容量,一定小于实际的物理容量
 239           ***********************************************************************/
 240          #ifdef ZNFAT_GET_TOTAL_SIZE
C51 COMPILER V8.09   ZNFAT                                                                 05/19/2011 23:29:42 PAGE 5   

              
              UINT32 znFAT_Get_Total_Size(void) 
              {
               return pArg->Total_Size;
              }
              
              #endif
 248          /***********************************************************************
 249           - 功能描述:读取FSInfo获取最近的一个可用空闲簇
 250           - 隶属模块:znFAT文件系统模块
 251           - 函数属性:内部
 252           - 参数说明:无     
 253           - 返回说明:最近的一个可用空闲簇
 254           - 注:znFAT中的FSInfo扇区(绝对1扇区)中记录了最近的一个可用空闲簇
 255           ***********************************************************************/
 256          
 257          UINT32 Search_Last_Usable_Cluster(void)
 258          {
 259   1       znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);
 260   1       return LE2BE(((struct FSInfo *)znFAT_Buffer)->Last_Cluster,4);
 261   1      }
 262          
 263          /***********************************************************************
 264           - 功能描述:znFAT文件系统初始化
 265           - 隶属模块:znFAT文件系统模块
 266           - 函数属性:外部,使用户使用
 267           - 参数说明:znFAT_Init_Arg类型的结构体指针,用于装载一些重要的参数信息,
 268                       以备后面使用     
 269           - 返回说明:无
 270           - 注:在使用znFAT前,这个函数是必须先被调用的,将很多参数信息装入到
 271                 arg指向的结构体中,比如扇区大小、根目录的位置、FAT表大小等等。
 272                 这些参数绝大部分是来自于DBR的BPB中,因此此函数主要在作对DBR的参数解析
 273           ***********************************************************************/
 274          
 275          void znFAT_Init(void)
 276          {
 277   1       struct znFAT_BPB *bpb;
 278   1      
 279   1       bpb=(struct znFAT_BPB *)(znFAT_Buffer);               //将数据缓冲区指针转为struct znFAT_BPB 型指针
 280   1      
 281   1       pArg->DEV_No=Dev_No; //装入设备号
 282   1      
 283   1       pArg->BPB_Sector_No   =znFAT_Find_DBR();               //znFAT_FindBPB()可以返回BPB所在的扇区号
 284   1      
 285   1       znFAT_ReadSector(pArg->BPB_Sector_No,znFAT_Buffer);
 286   1      
 287   1       pArg->FATsectors      =LE2BE((bpb->BPB_FATSz32)    ,4);//装入FAT表占用的扇区数到FATsectors中
 288   1       pArg->FirstDirClust   =LE2BE((bpb->BPB_RootClus)   ,4);//装入根目录簇号到FirstDirClust中
 289   1       pArg->BytesPerSector  =LE2BE((bpb->BPB_BytesPerSec),2);//装入每扇区字节数到BytesPerSector中
 290   1       pArg->SectorsPerClust =LE2BE((bpb->BPB_SecPerClus) ,1);//装入每簇扇区数到SectorsPerClust 中
 291   1       pArg->FirstFATSector  =LE2BE((bpb->BPB_RsvdSecCnt) ,2)+pArg->BPB_Sector_No;//装入第一个FAT表扇区号到First
             -FATSector 中
 292   1       pArg->FirstDirSector  =(pArg->FirstFATSector)+(bpb->BPB_NumFATs[0])*(pArg->FATsectors); //装入第一个目录

⌨️ 快捷键说明

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