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

📄 fat.lst

📁 mp3播放器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 198   2        }
 199   1        else
 200   1        {
 201   2          //FAT16
 202   2              for(;FileData.wCurFDBNo < (U16)FileData.RootDirNum;)
 203   2              {
 204   3                if(!flag)
 205   3                {
 206   4                  DMA_load_sector(CFatData.dwRootStartlba + (FileData.wCurFDBNo / CFatData.bFDBNumInSec),0x05);
 207   4                      flag = 1;
 208   4                }
 209   3                if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
 210   3              &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != ARC
             -HIVE_DIR))
 211   3                {
 212   4                      if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
 213   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
 214   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
 215   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
 216   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
 217   4                      {
 218   5                        ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
             -)->FileSize);
 219   5                        //FileData.dwFileDataSize = LE32(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileSi
             -ze);
 220   5      
 221   5                        //ENDIAN_ASSIGN_2(&varAl.TmpShort,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FSCl
             -usLO); 
 222   5                //FileData.dwFileStartCluNo = (0x0000FFFF)&((Uint32)varAl.TmpShort);
 223   5                        FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)*
             - DIREntrySize))->FSClusLO));
 224   5      
 225   5                        //CFatData.fRet = FATERR_NO_ERROR;
 226   5                        //将该文件FAT表读出并放到SRAM中
 227   5                        ReadFileFAT();
C51 COMPILER V8.08   FAT                                                                   07/28/2007 11:42:16 PAGE 5   

 228   5      
 229   5                        //varAl.WAVE_Flg = 0;
 230   5                        return OK;
 231   5                  }
 232   4                      /*else if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == 'W')
 233   4                             &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == 'A')
 234   4                             &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == 'V'))
 235   4                      {
 236   4                        ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
             -)->FileSize);
 237   4                        ENDIAN_ASSIGN_2(&varAl.TmpShort,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FSClus
             -LO); 
 238   4                FileData.dwFileStartCluNo = (0x0000FFFF)&((Uint32)varAl.TmpShort);
 239   4      
 240   4                        //CFatData.fRet = FATERR_NO_ERROR;
 241   4                        FileData.wCurFDBNo++;
 242   4                        
 243   4                        //将该文件FAT表读出并放到SRAM中,起始地址为0xD000
 244   4                        ReadFileFAT();
 245   4                        varAl.WAVE_Flg = 1;
 246   4                        return(1);
 247   4                      }*/
 248   4                      else
 249   4                      {
 250   5                        FileData.wCurFDBNo++;
 251   5                        if(!(FileData.wCurFDBNo & 0x0F))
 252   5                          flag = 0;
 253   5                      }
 254   4                }
 255   3                else
 256   3                {
 257   4                  FileData.wCurFDBNo++;
 258   4                      if(!(FileData.wCurFDBNo & 0x0F))
 259   4                        flag = 0;
 260   4                }
 261   3          }
 262   2              //CFatData.fRet = FATERR_NO_FILE;
 263   2      #if TX_DEBUG
 264   2          //SendChar(0xC1);
 265   2      #endif
 266   2              return KO;
 267   2        }
 268   1      }
 269          /************************************************
 270          函 数 名: Backward()
 271          功    能:
 272          说    明:
 273          调    用:
 274          全局变量:
 275          入口参数:无
 276          出口参数:无
 277          返 回 值:
 278          ************************************************/
 279          bit Backward(void)
 280          {
 281   1        bit flag = 0;
 282   1        U8 index;
 283   1        U32 position;
 284   1        if(CFatData.fFAT32)
 285   1        {
 286   2          //FAT32
 287   2              varAl.TmpShort = FileData.wCurFDBNo;
C51 COMPILER V8.08   FAT                                                                   07/28/2007 11:42:16 PAGE 6   

 288   2              varAl.TmpLong = FileData.dwCurCluNo;
 289   2              if(FileData.wCurFDBNo)
 290   2                FileData.wCurFDBNo--;
 291   2              else
 292   2              {
 293   3                FileData.wCurFDBNo = (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize - 1;
 294   3                if(FileData.dwCurCluNo)
 295   3                  FileData.dwCurCluNo--;
 296   3                else
 297   3                  FileData.dwCurCluNo = FileData.RootDirNum - 1;
 298   3              }
 299   2          for(;;)
 300   2              {
 301   3                position = FileData.dwCurCluNo;
 302   3                for(index = 0; index  < MAX_FILE_FRAGMENT_NUMBER; index++)
 303   3                {
 304   4                  if(position < rootclusters[index].number)
 305   4                  {
 306   5                    position = rootclusters[index].cluster + position;
 307   5                    break;
 308   5                      }
 309   4                      else
 310   4                      {
 311   5                        position -= rootclusters[index].number;
 312   5                      }
 313   4                }
 314   3                position = CFatData.dwClu2Startlba + (position - 2)* (U32)CFatData.bSectorsPerClu;
 315   3            for(;FileData.wCurFDBNo < (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize;)
 316   3            {
 317   4                  if(!flag)
 318   4                      {
 319   5                    DMA_load_sector(position + FileData.wCurFDBNo * DIREntrySize / CFatData.wBytesPerSec, 0x05);
 320   5                        flag = 1;
 321   5                  }
 322   4              if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
 323   4                &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != A
             -RCHIVE_DIR))
 324   4                  {
 325   5                        if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
 326   5                          &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
 327   5                          &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
 328   5                          &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
 329   5                          &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
 330   5                        {
 331   6                          ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySiz
             -e))->FileSize);
 332   6                              FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* 
             -DIREntrySize))->FSClusLO));
 333   6                  FileData.dwFileStartCluNo += CFatData.dwMask &(((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBN
             -o & 0x0F)* DIREntrySize))->FSClusHI)) << 16);
 334   6                  ReadFileFAT();
 335   6                  return OK;
 336   6                        }
 337   5                        else
 338   5                        {
 339   6                          FileData.wCurFDBNo--;
 340   6                          if((FileData.wCurFDBNo & 0x0F)== 0x0F)
 341   6                            flag = 0;
 342   6                              if((FileData.dwCurCluNo == varAl.TmpLong)&&(FileData.wCurFDBNo == varAl.TmpShort))
 343   6                                return KO;
 344   6                        }
 345   5                  }
C51 COMPILER V8.08   FAT                                                                   07/28/2007 11:42:16 PAGE 7   

 346   4                      else
 347   4                      {
 348   5                        FileData.wCurFDBNo--;
 349   5                        if((FileData.wCurFDBNo & 0x0F)== 0x0F)
 350   5                          flag = 0;
 351   5                        if((FileData.dwCurCluNo == varAl.TmpLong)&&(FileData.wCurFDBNo == varAl.TmpShort))
 352   5                              return KO;
 353   5                      }
 354   4                }
 355   3            FileData.wCurFDBNo = (U16)CFatData.bSectorsPerClu * CFatData.wBytesPerSec / DIREntrySize - 1;
 356   3                if(FileData.dwCurCluNo)
 357   3                  FileData.dwCurCluNo--;
 358   3                else
 359   3                  FileData.dwCurCluNo = FileData.RootDirNum - 1;
 360   3              }
 361   2        }
 362   1        else
 363   1        {
 364   2          //FAT16
 365   2              varAl.TmpShort = FileData.wCurFDBNo;
 366   2          if(--FileData.wCurFDBNo >= (U16)FileData.RootDirNum)
 367   2                FileData.wCurFDBNo = (U16)FileData.RootDirNum - 1;
 368   2              for(;FileData.wCurFDBNo != varAl.TmpShort;)
 369   2              {
 370   3                if(!flag)
 371   3                {
 372   4                  DMA_load_sector(CFatData.dwRootStartlba +(FileData.wCurFDBNo / CFatData.bFDBNumInSec),0x05);
 373   4                      flag = 1;
 374   4                }
 375   3                if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute != 0x0F)
 376   3                  &&((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Attribute & ARCHIVE_DIR) != ARCHIV
             -E_DIR))
 377   3                {
 378   4                  if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == (S8)'M')
 379   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == (S8)'P')
 380   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == (S8)'3')
 381   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Unused)
 382   4                        &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->FileName[0] != (S8)DIR_Deleted))
 383   4                      {
 384   5                        //varAl.WAVE_Flg = 0;
 385   5                        ENDIAN_ASSIGN_4(&FileData.dwFileDataSize,&((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize)
             -)->FileSize);
 386   5                        FileData.dwFileStartCluNo = CFatData.dwMask &((U32)LE16(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)*
             - DIREntrySize))->FSClusLO));
 387   5      
 388   5                        ReadFileFAT();
 389   5                        return OK;
 390   5                      }
 391   4                      /*else if((((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[0] == 'W')
 392   4                             &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[1] == 'A')
 393   4                             &&(((_DIR *)(sbuf1 + (FileData.wCurFDBNo & 0x0F)* DIREntrySize))->Extension[2] == 'V'))
 394   4                      {
 395   4                        //CFatData.fRet = FATERR_NO_ERROR;
 396   4                        if( FileData.wCurFDBNo >= FileData.RootDirNum)
 397   4                          FileData.wCurFDBNo = FileData.RootDirNum - 1;
 398   4                        varAl.WAVE_Flg = 1;

⌨️ 快捷键说明

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