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

📄 kw_fat32.lst

📁 linux下数据下载器的设计与实现
💻 LST
📖 第 1 页 / 共 4 页
字号:
 591          void FM_GetLastFileNameBySN()
 592          {
 593   1              WORD xdata i,j,k;
 594   1              DWORD xdata tmpLBA = 0;
 595   1              Dir_tag xdata * pDir = 0;
 596   1      
 597   1              //设置文件前缀
 598   1              SM_CpyString(FM_FileName,CM_ConfigParameter.File_Start,CM_ConfigParameter.File_StartLength);
 599   1              
 600   1              for(i=CM_ConfigParameter.File_StartLength;i<8;i++)                      //设置文件后缀,字符为'0'
 601   1              {
 602   2                      FM_FileName[i] = '0';
 603   2              }
 604   1              k = CM_ConfigParameter.File_StartLength+1;
 605   1      
 606   1              for(i=0; i<((32 * FM_dirs_fat) / 512); i++)                                     //打开目录表,开始查找文件并排序
 607   1              {
 608   2                      NM_ReadPage(FM_ptr_root + i);
 609   2                      pDir = ((Dir_tag * ) (& EP6FIFOBUF[0]));
 610   2      
 611   2                      for(j=0;j<16;j++)
 612   2                      {
C51 COMPILER V7.50   KW_FAT32                                                              10/12/2007 17:05:47 PAGE 11  

 613   3                              //跳过已删除项及空项
 614   3                              if(pDir->FileName[0] == 0x00 ||  pDir->FileName[0] == 0xe5)     //FileName[0]
 615   3                              {
 616   4                                      pDir ++;
 617   4                                      continue;
 618   4                              }
 619   3      
 620   3                              //调过目录项
 621   3                              if(pDir->attribute & 0x18)
 622   3                              {
 623   4                                      pDir ++;
 624   4                                      continue;
 625   4                              }
 626   3                              
 627   3                              //比较文件前缀,若相同
 628   3                              if(SM_CmpString(pDir->FileName,FM_FileName,CM_ConfigParameter.File_StartLength) == 1)
 629   3                              {
 630   4                                      //比较后缀,若大于,则复制新名称,即每次比较,找出最大的文件名(ASIIC排序)
 631   4                                      if(SM_CmpString2(FM_FileName,pDir->FileName,8-CM_ConfigParameter.File_StartLength,CM_ConfigParameter.F
             -ile_StartLength) == 1)
 632   4                                      {
 633   5                                              SM_CpyString(FM_FileName+CM_ConfigParameter.File_StartLength,
 634   5                                                      pDir->FileName+CM_ConfigParameter.File_StartLength,8-CM_ConfigParameter.File_StartLength);
 635   5                                      }
 636   4                              }
 637   3      
 638   3                          pDir ++;
 639   3                      }
 640   2              }
 641   1      
 642   1              //获取最大文件编号后,再加1,生成新文件名
 643   1              for(i=0; i<8;i++)
 644   1              {
 645   2                      if(FM_FileName[8-i-1] >= '9')
 646   2                              FM_FileName[8-i-1] = '0';
 647   2                      else
 648   2                      {
 649   3                              FM_FileName[8-i-1]++;
 650   3                              break;
 651   3                      }
 652   2              }
 653   1              //生成新扩展名
 654   1              FM_FileName[8] = '.';
 655   1              SM_CpyString(FM_FileName+9,CM_ConfigParameter.File_Ext,3);
 656   1      }
 657          
 658          /************************************************************************************* 
 659            Function:       FM_CreateNewFileName
 660            Description:    创建新文件名
 661            Called By:      
 662            Input:          N/A
 663            Output:         N/A
 664            Return:         void
 665            Others:         如果按序列号生长文件,文件名在目前目录里已有最大文件名上加1
 666                                            如果按照日期时间生产,则获取当前时间。×未实现
 667          *************************************************************************************/
 668          void FM_CreateNewFileName()
 669          {
 670   1              //if create file by sn;we should get last file
 671   1              if(CM_ConfigParameter.File_End == CONFIG_FILE_SN)
 672   1              {
 673   2                      FM_GetLastFileNameBySN();
C51 COMPILER V7.50   KW_FAT32                                                              10/12/2007 17:05:47 PAGE 12  

 674   2              }
 675   1      }
 676          
 677          /************************************************************************************* 
 678            Function:       FM_DeleteFirstFile
 679            Description:    删除第一个文件
 680            Called By:      
 681            Input:          N/A
 682            Output:         N/A
 683            Return:         void
 684            Others:         如果有和配置参数文件前缀不同的文件,则优先删除
 685                                            否则删除序号最小的文件
 686          *************************************************************************************/
 687          void FM_DeleteFirstFile()
 688          {
 689   1              FM_GetFirstFileNameBySN();
 690   1              FM_DeleteFileInRoot(FM_FileName_F);
 691   1      }
 692          
 693          /************************************************************************************* 
 694            Function:       FM_GetFirstFileNameBySN
 695            Description:    获取第一个文件
 696            Called By:      
 697            Input:          N/A
 698            Output:         N/A
 699            Return:         void
 700            Others:         如果有和配置参数文件前缀不同的文件,返回该文件
 701                                            否则返回序号最小的文件
 702          *************************************************************************************/
 703          void FM_GetFirstFileNameBySN()
 704          {
 705   1              WORD xdata i,j,k;
 706   1              DWORD xdata tmpLBA = 0;
 707   1              Dir_tag xdata * pDir = 0;
 708   1      
 709   1              //获取文件前缀
 710   1              SM_CpyString(FM_FileName_F,CM_ConfigParameter.File_Start,CM_ConfigParameter.File_StartLength);
 711   1      
 712   1              //设置文件后缀
 713   1              for(i=CM_ConfigParameter.File_StartLength;i<8;i++)
 714   1                      FM_FileName_F[i] = 'Z';
 715   1              k = CM_ConfigParameter.File_StartLength+1;
 716   1      
 717   1              //开始查找文件并排序
 718   1              for(i=0; i<((32 * FM_dirs_fat) / 512); i++)
 719   1              {
 720   2                      NM_ReadPage(FM_ptr_root + i);
 721   2                      pDir = ((Dir_tag * ) (& EP6FIFOBUF[0]));
 722   2      
 723   2                      for(j=0;j<16;j++)
 724   2                      {
 725   3                              //跳过已删除文件
 726   3                              if(pDir->FileName[0] == 0x00 ||  pDir->FileName[0] == 0xe5)     //FileName[0]
 727   3                              {
 728   4                                      pDir ++;
 729   4                                      continue;               
 730   4                              }
 731   3      
 732   3                              //跳过目录项
 733   3                              if(pDir->attribute & 0x18)
 734   3                              {
 735   4                                      pDir ++;
C51 COMPILER V7.50   KW_FAT32                                                              10/12/2007 17:05:47 PAGE 13  

 736   4                                      continue;
 737   4                              }
 738   3                              
 739   3                              //比较文件前缀
 740   3                              if(SM_CmpString(pDir->FileName,FM_FileName_F,CM_ConfigParameter.File_StartLength) == 1)
 741   3                              {
 742   4                                      //若文件前缀相同,则比较是否大于,若不大于则复制文件名
 743   4                                      if(SM_CmpString2(FM_FileName_F,pDir->FileName,8-CM_ConfigParameter.File_StartLength,CM_ConfigParameter
             -.File_StartLength) == 0)
 744   4                                      {
 745   5                                              SM_CpyString(FM_FileName_F+CM_ConfigParameter.File_StartLength,
 746   5                                                      pDir->FileName+CM_ConfigParameter.File_StartLength,8-CM_ConfigParameter.File_StartLength);
 747   5                                      }
 748   4                              }
 749   3                              else
 750   3                              {
 751   4                                      //若文件前缀不同,且不是配置文件,则返回
 752   4                                      if(SM_CmpString(pDir->FileName,"KWCONFIG",8) == 0)                                      
 753   4                                      {
 754   5                                              SM_CpyString(FM_FileName_F,pDir->FileName,8);
 755   5                                              FM_FileName[8] = '.';
 756   5                                              SM_CpyString(FM_FileName_F+9,pDir->ExtName,3);
 757   5                                              return;
 758   5                                      }                                       
 759   4                              }
 760   3                          pDir ++;
 761   3                      }
 762   2              }
 763   1      }
 764          
 765          
 766          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4895    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   8261      68
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      40
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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