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

📄 hpi.lst

📁 采用811芯片实现单片机读写U盘的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.00  HPI                                                                    09/22/2005 17:15:31 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN .\out\HPI.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HPI.C LARGE BROWSE DEBUG OBJECTEXTEND OBJECT(.\out\HPI.obj)

stmt level    source

   1          #define HPI_FILE
   2          #include "include.h"
   3          
   4          //extern XXGFLAGS bdata bXXGFlags;
   5          //extern unsigned char xdata DBUF[BUFFER_LENGTH];
   6          //////////////////////////////////////////
   7          //UART_CMD_BLOCK xdata inblock;
   8          //unsigned char xdata UARTBUF[UARTBUF_LENGTH];
   9          //extern SYS_INFO_BLOCK xdata DeviceInfo;
  10          //UART_CMD_BLOCK xdata UartCmdBlock;
  11          //UART_RSP_BLOCK xdata UartRspBlock;
  12          //extern FILE_INFO xdata ThisFile;
  13          //extern FREE_FAT_INFO xdata FreeFat;
  14          
  15          unsigned char UartHandler(uchar cmd,uchar package,uint buf_len,uchar *para)
  16          {
  17   1        unsigned char retStatus;
  18   1        unsigned int len;
  19   1        unsigned long pointer;
  20   1        
  21   1              switch(cmd)
  22   1              {
  23   2              case CMD_RESET:
  24   2          
  25   2                      break;
  26   2                      
  27   2              case CMD_DETECT_DEVICE:
  28   2                      file_point.file_open_flag=0;    
  29   2                      para[0]=DetectDevice();
  30   2                      retStatus=send_data(0,1,para);
  31   2                      break;
  32   2                      
  33   2              case CMD_LIST:
  34   2                      file_point.file_open_flag=0;    
  35   2                      retStatus=List(para);
  36   2                      break;
  37   2                      
  38   2              case CMD_OPEN_FILE:
  39   2                      retStatus=OpenFile(buf_len,para);
  40   2      //              if(!retStatus)
  41   2      //                      send_data(0,32,para);
  42   2                      break;
  43   2                      
  44   2          case CMD_CREATE_FILE:
  45   2                              
  46   2                      retStatus=CreateFile(buf_len,para);
  47   2                      if(retStatus==FILE_EXIST){
  48   3                              retStatus=OpenFile(11,para);
  49   3                              if(retStatus) break;
  50   3                      }       
  51   2                      if(!retStatus)
  52   2                              send_data(0,32,para);
  53   2              break;
  54   2              
  55   2          case CMD_READ_FILE:
C51 COMPILER V7.00  HPI                                                                    09/22/2005 17:15:31 PAGE 2   

  56   2              len=*((uint *)para);
  57   2                      retStatus=ReadFile(len,para);
  58   2                      if(!retStatus)
  59   2                              send_data(0,len,para);
  60   2              break;
  61   2              
  62   2          case CMD_WRITE_FILE:
  63   2              len=*((uint *)para);
  64   2              retStatus=WriteFile(len,&para[2]);
  65   2              if(!retStatus)
  66   2                              send_data(0,0,para);
  67   2              break;
  68   2          
  69   2          case CMD_REMOVE_FILE:
  70   2              if(len!=11){
  71   3                      retStatus=RECE_DATA_ERR;
  72   3                      break;
  73   3              }       
  74   2              file_point.file_open_flag=0;    
  75   2              retStatus=RemoveFile(para);
  76   2              if(!retStatus) 
  77   2                      send_data(0,0,para);
  78   2              break;
  79   2              
  80   2      //    case CMD_GET_CAPACITY:
  81   2      //      ThisFile.bFileOpen=0;   
  82   2      //      retStatus=GetCapacity();
  83   2      ////            UartRspBlock.cmd=CMD_GET_CAPACITY_RSP;
  84   2      //      break;
  85   2      //      
  86   2      //    case CMD_GET_FREE_CAPACITY:
  87   2      //      ThisFile.bFileOpen=0;   
  88   2      //      retStatus=GetFreeCapacity();
  89   2      ////            UartRspBlock.cmd=CMD_GET_FREE_CAPACITY_RSP;
  90   2      //      break;
  91   2      //    
  92   2          case CMD_SET_FILE_POINTER:
  93   2                      pointer=*((ulong *)para);
  94   2                      retStatus=SetFilePointer(pointer);  
  95   2                      if(!retStatus)
  96   2                              send_data(0,0,para);
  97   2              break;
  98   2      //      
  99   2      //    case CMD_GET_VERSION:
 100   2      //      ThisFile.bFileOpen=0;
 101   2      //      retStatus=GetFirmwareVersion();   
 102   2      ////    UartRspBlock.cmd=CMD_GET_VERSION_RSP; 
 103   2      //      break;
 104   2              
 105   2          default:
 106   2              retStatus=CMD_ERROR;
 107   2              break;
 108   2        }
 109   1        if(retStatus)
 110   1                      send_error(retStatus);
 111   1        return TRUE;
 112   1      }
*** WARNING C280 IN LINE 15 OF HPI.C: 'package': unreferenced local variable
 113          
 114          unsigned char DetectDevice(void)
 115          {
 116   1              return bXXGFlags.bits.SLAVE_IS_ATTACHED;
C51 COMPILER V7.00  HPI                                                                    09/22/2005 17:15:31 PAGE 3   

 117   1              
 118   1      }
 119          
 120          /******************************************************
 121          在当前目录下查找文件
 122          入口参数:flag==1   找到文件后更新文件目录项
 123                                         ==0   找到文件后返回目录项
 124          ******************************************************/
 125          uchar find_file(uchar *file_name,uchar *file_item,uchar flag)
 126          {
 127   1              uint i;
 128   1              uchar bstop,end_sector,find_flag;
 129   1              uchar package=1;
 130   1              uchar sector_temp;
 131   1              ulong start_sec,clus_temp;
 132   1              
 133   1              find_flag=0;
 134   1              bstop=0;
 135   1              start_sec=cur_dir_info.start_sec;
 136   1              clus_temp=cur_dir_info.start_clue;
 137   1              end_sector=(uchar)(deviceinfo.RootEntCnt>>4);
 138   1              
 139   1              sector_temp=0;
 140   1              while(1){
 141   2                      
 142   2                      if(!RBC_Read(start_sec,1,DBUF))
 143   2                              return DEVICEC_OP_ERR;
 144   2                              
 145   2                      for(i=0;i<deviceinfo.BytePerSec;i=i+32){
 146   3                              if(DBUF[i]==0x00){
 147   4                                      bstop=1;
 148   4                                      break;
 149   4                              }
 150   3                              if((DBUF[i]==0xE5)||(DBUF[i+11]==0x0f))
 151   3                                      continue;
 152   3                              else{
 153   4                                      if(DBUF[i]==0x05) DBUF[i]=0xe5;
 154   4                                      if(!memcmp_cur(&DBUF[i], file_name, 11)) {
 155   5                                              if(flag){
 156   6                                                      memcpy_cur(&DBUF[i],file_item,32);
 157   6                                                      //更新目录信息
 158   6                                                      if(!RBC_Write(start_sec,1,DBUF))
 159   6                                                              return DEVICEC_OP_ERR;
 160   6                                              }else{  
 161   6                                                      memcpy_cur( file_item,&DBUF[i],32);
 162   6                                              }       
 163   5                                              find_flag=1;
 164   5                                              bstop=1;
 165   5                                              break;  
 166   5                                      }               
 167   4                              }
 168   3                      }
 169   2                      
 170   2                      if(bstop==1)break;
 171   2                      start_sec++;
 172   2                      sector_temp++;
 173   2                      if((deviceinfo.type)||(!cur_dir_info.root_flag)){
 174   3                              if(sector_temp==deviceinfo.SecPerClus){
 175   4                                      sector_temp=0;
 176   4                                      clus_temp=GetNextClusterNum(clus_temp);
 177   4                                      if(clus_temp>0x0fffffef) break;
 178   4                                      start_sec=FirstSectorofCluster(clus_temp);
C51 COMPILER V7.00  HPI                                                                    09/22/2005 17:15:31 PAGE 4   

 179   4                              }       
 180   3                      }else{
 181   3                              if(sector_temp==end_sector) break;
 182   3                      }       
 183   2              }       
 184   1              
 185   1              if(!find_flag) return FILE_NON_EXIST;
 186   1              
 187   1              return 0;       
 188   1      }
 189          
 190          /******************************************************
 191          在当前目录下插入文件目录项
 192          说明:直接在目录尾插入文件目录项
 193          ******************************************************/
 194          uchar add_file_item(uchar *file_item)
 195          {
 196   1              uint i;
 197   1              uchar bstop,end_sector,find_flag;
 198   1              uchar package=1;
 199   1              uchar sector_temp;
 200   1              ulong start_sec,clus_temp;
 201   1              
 202   1              find_flag=0;
 203   1              bstop=0;
 204   1      //      start_sec=cur_dir_info.start_sec;
 205   1              clus_temp=cur_dir_info.start_clue;
 206   1              end_sector=(uchar)(deviceinfo.RootEntCnt>>4);
 207   1      
 208   1              //目录没有文件长度,故需要重新搜索
 209   1              if((deviceinfo.type)||(!cur_dir_info.root_flag)){
 210   2                      //得到最后一个簇号
 211   2                      while(1){
 212   3                              clus_temp=GetNextClusterNum(clus_temp);
 213   3                              if(clus_temp>0x0fffffef) break;
 214   3                      }
 215   2                      start_sec=FirstSectorofCluster(clus_temp);
 216   2              }else{
 217   2                      start_sec=cur_dir_info.start_sec;
 218   2              }       
 219   1              
 220   1              while(1){
 221   2                      
 222   2                      if(!RBC_Read(start_sec,1,DBUF))
 223   2                              return DEVICEC_OP_ERR;
 224   2                              
 225   2                      for(i=0;i<deviceinfo.BytePerSec;i=i+32){
 226   3                              if(DBUF[i]==0x00){
 227   4                                      bstop=1;
 228   4                                      memcpy_cur(&DBUF[i], file_item,32);
 229   4                                      break;
 230   4                              }
 231   3                      }
 232   2                      
 233   2                      if(bstop==1)break;
 234   2                      start_sec++;
 235   2                      if((deviceinfo.type)||(!cur_dir_info.root_flag)){
 236   3                              if(start_sec==deviceinfo.SecPerClus){
 237   4                                      start_sec=FirstSectorofCluster(fat_info.next_free_clus);

⌨️ 快捷键说明

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