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

📄 hpi.lst

📁 51+sl811读写U盘的源程序+原理图
💻 LST
📖 第 1 页 / 共 4 页
字号:
 622          
 623          unsigned char RemoveFile(unsigned char *pBuffer)
 624          {
 625   1      #define RspBlockRemoveFile UartRspBlock.RspBlock.Rsp_RemoveFile
 626   1              unsigned int sector,i;
 627   1              unsigned char bStop,j;
 628   1              PDIR_INFO pDirInfo;
 629   1              
 630   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 631   1              {
 632   2              UartRspBlock.errcode=ERC_NODEVICE;
 633   2              return FALSE;           
 634   2              }
 635   1              ///////////////////////////////////////////////////////////
 636   1              //RspBlockRemoveFile.result=0x1;
 637   1              ////////////// 清除目录/////////////////////////////////////
 638   1              for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
 639   1                      {   
 640   2                      //////////////////////////////////////////////////
 641   2                      if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
 642   2                              {
 643   3                              UartRspBlock.errcode=ERC_DEVICEERR;
 644   3                              return FALSE;   
 645   3                              }
 646   2                      ///////////////////////////////////////////////////
 647   2                      for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 648   2                              {
 649   3                              if(DBUF[i]==0x00)
 650   3                                      {
 651   4                                      UartRspBlock.errcode=ERC_FILENOTFOUND;
 652   4                                      return FALSE;   
 653   4                                      }
 654   3                              ///////////////////////////////////////////
 655   3                              j=0;
 656   3                              while(DBUF[i+j]==*(pBuffer+j))
 657   3                                      {
 658   4                                       j=j+1;
 659   4                                       if(j>10) break;
 660   4                                       }//end while
 661   3                              
 662   3                              if(j>10)
 663   3                                      {       
 664   4                                      DBUF[i]=0xE5;
 665   4                                      pDirInfo=(PDIR_INFO)(DBUF+i);
 666   4                                      ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
 667   4                                      DelayMs(15);
 668   4                                      if(!RBC_Write(DeviceInfo.RootStartSector+sector,1,DBUF))
 669   4                                              {
 670   5                                              UartRspBlock.errcode=ERC_DEVICEERR;
 671   5                                              return FALSE;   
 672   5                                              }
 673   4                                      //////////////////// 清除FAT中的纪录////////////////////////
 674   4                                      DelayMs(10);
C51 COMPILER V7.50   HPI                                                                   11/02/2007 09:31:21 PAGE 12  

 675   4                                      if(!DeleteClusterLink(ThisFile.StartCluster))
 676   4                                                      {
 677   5                                                      UartRspBlock.errcode=ERC_DEVICEERR;
 678   5                                                      return FALSE;   
 679   5                                                      }
 680   4                                      bStop=1;
 681   4                                      break;
 682   4                                      }
 683   3                              
 684   3                              }//end for
 685   2                      if(bStop==1)
 686   2                              break;
 687   2                      
 688   2                     }//end search
 689   1              if(sector>=DeviceInfo.BPB_RootEntCnt)
 690   1                      {
 691   2                      UartRspBlock.errcode=ERC_FILENOTFOUND;
 692   2                              return FALSE;   
 693   2                      }
 694   1              //////////////////////////////////////////////
 695   1              return TRUE;
 696   1      #undef RspBlockRemoveFile
 697   1      }
 698          
 699          unsigned char GetCapacity(void)
 700          {
 701   1              unsigned int sectorNum,freesectorcnt,i;
 702   1              
 703   1      #define RspBlockGetCapacity UartRspBlock.RspBlock.Rsp_GetCapacity
 704   1              PREAD_CAPACITY_RSP pBuf;
 705   1              
 706   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 707   1              {
 708   2              UartRspBlock.errcode=ERC_NODEVICE;
 709   2              return FALSE;           
 710   2              }
 711   1              ///////////////////////////////////////////////////////////
 712   1              if(!RBC_ReadCapacity())
 713   1              {
 714   2              UartRspBlock.errcode=ERC_DEVICEERR;
 715   2              return FALSE;   
 716   2              }
 717   1              
 718   1              pBuf=(PREAD_CAPACITY_RSP)DBUF;
 719   1              RspBlockGetCapacity.disksize=SwapINT32((pBuf->LastLBA+1)*pBuf->BlockSize);
 720   1              ////////////////////////////////////////////////////////////////////////
 721   1              sectorNum=DeviceInfo.FatStartSector;
 722   1              freesectorcnt=0;
 723   1              while(sectorNum<DeviceInfo.BPB_FATSz16+DeviceInfo.FatStartSector)
 724   1              {
 725   2                      
 726   2                      if(RBC_Read(sectorNum,1,DBUF))
 727   2                      {
 728   3                        for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+2)
 729   3                              {
 730   4                               //clusterNum++;        
 731   4                               
 732   4                               if((DBUF[i]==0xff)&&(DBUF[i+1]==0xff))
 733   4                                      {       
 734   5                                      freesectorcnt++;
 735   5                                      }
 736   4                              // clusterNum++;
C51 COMPILER V7.50   HPI                                                                   11/02/2007 09:31:21 PAGE 13  

 737   4                              }       
 738   3                      }
 739   2                      else
 740   2                              {
 741   3                              UartRspBlock.errcode=ERC_DEVICEERR;
 742   3                              return FALSE;   
 743   3                              }
 744   2                      sectorNum++;
 745   2              }
 746   1              
 747   1              ////////////////////////////////////////////////////////////////////////
 748   1              RspBlockGetCapacity.freedisksize=DeviceInfo.BPB_BytesPerSec*DeviceInfo.BPB_SecPerClus;
 749   1              RspBlockGetCapacity.freedisksize=freesectorcnt*RspBlockGetCapacity.freedisksize;
 750   1              RspBlockGetCapacity.freedisksize=SwapINT32(RspBlockGetCapacity.disksize)-RspBlockGetCapacity.freedisksize
             -;
 751   1              RspBlockGetCapacity.freedisksize=SwapINT32(RspBlockGetCapacity.freedisksize);
 752   1                      
 753   1              return TRUE;
 754   1      #undef RspBlockGetCapacity
 755   1      }
 756          
 757          unsigned char GetFreeCapacity(void)
 758          {
 759   1      #define RspBlockGetCapacity UartRspBlock.RspBlock.Rsp_GetFreeCapacity
 760   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 761   1              {
 762   2              UartRspBlock.errcode=ERC_NODEVICE;
 763   2              return FALSE;           
 764   2              }
 765   1              //////////////////////////////////////////////
 766   1              
 767   1              
 768   1              return TRUE;
 769   1      #undef RspBlockGetFreeCapacity
 770   1      }
 771          
 772          unsigned char SetFilePointer(unsigned long pointer)
 773          {
 774   1      #define RspBlockSetFilePointer UartRspBlock.RspBlock.Rsp_SetFilePointer
 775   1              
 776   1              //ThisFile.FilePointer=UartCmdBlock.CmdBlock.Cmd_SetFilePointer.pointer;
 777   1              if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
 778   1              {
 779   2              UartRspBlock.errcode=ERC_NODEVICE;
 780   2              return FALSE;           
 781   2              }
 782   1              if(!ThisFile.bFileOpen)
 783   1              {
 784   2              UartRspBlock.errcode=ERC_FILENOTOPENED;
 785   2              return FALSE;           
 786   2              }
 787   1              ///////////////////////////////////////////////////////////
 788   1              ThisFile.pointer=pointer;
 789   1              if(ThisFile.pointer>ThisFile.LengthInByte)
 790   1              {
 791   2              UartRspBlock.errcode=ERC_LENGTHEXCEED;
 792   2              return FALSE;   
 793   2              }
 794   1              
 795   1              if(!GoToPointer(ThisFile.pointer))
 796   1              {
 797   2              ThisFile.bFileOpen=0;
C51 COMPILER V7.50   HPI                                                                   11/02/2007 09:31:21 PAGE 14  

 798   2              UartRspBlock.errcode=ERC_DEVICEERR;
 799   2              return FALSE;   
 800   2              }
 801   1              //////////////////////////////////////////////
 802   1              return TRUE;
 803   1      
 804   1      #undef RspBlockSetFilePointer
 805   1      }
 806          
 807          unsigned char GetFirmwareVersion(void)
 808          {
 809   1         #define RspBlockGetVersion UartRspBlock.RspBlock.Rsp_GetVersion
 810   1         ////////////////////////////////////////////////////////////
 811   1         RspBlockGetVersion.version=0x0102;
 812   1         return TRUE;
 813   1         #undef RspBlockGetVersion
 814   1      }
 815          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4514    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =  16607    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      81
   IDATA SIZE       =   ----       4
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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