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

📄 hpi.lst

📁 这是在SL811上实现的对U盘进行FAT32或FAT16读写的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 793   3      			if(j>10)
 794   3      			    {
 795   4      			    if(bXXGFlags.bIsFat32==0)
 796   4      			    	{
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 14  

 797   5      			    	pDir->DIR_FstClusLO=SwapINT16(ThisFile.StartCluster);
 798   5      			    	}
 799   4      			    else
 800   4      			    	{
 801   5      			    	DBUF[i+20]=ThisFile.StartCluster>>16;
 802   5      			    	DBUF[i+21]=ThisFile.StartCluster>>24;
 803   5      			    	DBUF[i+26]=ThisFile.StartCluster;
 804   5      			    	DBUF[i+27]=ThisFile.StartCluster>>8;
 805   5      			    	//pDirInfo->startCluster=SwapINT16(ThisFile.StartCluster);
 806   5      			    	}
 807   4      			    if(ThisFile.pointer>ThisFile.LengthInByte)
 808   4      				ThisFile.LengthInByte=ThisFile.pointer;
 809   4      			    pDir->DIR_FileSize=SwapINT32(ThisFile.LengthInByte);
 810   4      			    if(!RBC_Write(sectorToRead,1,DBUF))
 811   4      		   			{
 812   5      		   			//UartRspBlock.errcode=ERC_DEVICEERR;
 813   5      					return FALSE;	
 814   5      		   			}
 815   4      			    bStop=1;
 816   4      			    break;
 817   4      			    }
 818   3      			/////////////////////////////////////////
 819   3      			}
 820   2      		if(bStop==1)
 821   2      			break;
 822   2      		////////////////////////////////////////////////////
 823   2      	       }// end for sector
 824   1      	 return TRUE;
 825   1      
 826   1      }
 827          
 828          U8 RemoveFile(U8 *pBuffer,U8 bIsFile)		//删除文件
 829          {
 830   1      #define RspBlockRemoveFile UartRspBlock.RspBlock.Rsp_RemoveFile
 831   1      	unsigned int xdata sector,i;
 832   1      	unsigned char xdata bStop,j,bFlag;
 833   1      	PDIR_STRUC pDir;
 834   1      	unsigned long xdata sectorToRead,dirClusterPointer;
 835   1      	
 836   1      	if(!bXXGFlags.UDiskOK)
 837   1      	{
 838   2      	UartRspBlock.errcode=ERC_NODEVICE;
 839   2      	return FALSE;		
 840   2      	}
 841   1      	///////////////////////////////////////////////////////////
 842   1      	//RspBlockRemoveFile.result=0x1;
 843   1      	////////////// 清除目录/////////////////////////////////////
 844   1      	sector=0;
 845   1      	dirClusterPointer=ThisDir.StartCluster;
 846   1      	for(;;)
 847   1      	    	{   
 848   2      		//////////////////////////////////////////////////
 849   2      		if(!SeekSectorToRead(&dirClusterPointer,&sector,&sectorToRead))
 850   2      			return FALSE;
 851   2      		//////////////////////////////////////////////////
 852   2      		if(!RBC_Read(sectorToRead,1,DBUF))
 853   2      			{
 854   3      			UartRspBlock.errcode=ERC_DEVICEERR;
 855   3      			return FALSE;	
 856   3      			}
 857   2      		///////////////////////////////////////////////////
 858   2      		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 15  

 859   2      			{
 860   3      			if(DBUF[i]==0x00)
 861   3      				{
 862   4      				UartRspBlock.errcode=ERC_FILENOTFOUND;
 863   4      				return FALSE;	
 864   4      				}
 865   3      			///////////////////////////////////////////
 866   3      			if(bIsFile)
 867   3      				{
 868   4      				bFlag=DBUF[i+11]&0x18;
 869   4      				if(bFlag!=0)
 870   4      					continue;
 871   4      				}
 872   3      			else
 873   3      				{
 874   4      				bFlag=DBUF[i+11]&0x10;
 875   4      				if(bFlag!=0x10)
 876   4      					continue;}
 877   3      					
 878   3      			j=0;
 879   3      			while(DBUF[i+j]==*(pBuffer+j))
 880   3      				{
 881   4      				 j=j+1;
 882   4      				 if(j>11) break;
 883   4      				 }//end while
 884   3      			
 885   3      			if(j>11)
 886   3      			 	{	
 887   4      			 	DBUF[i]=0xE5;
 888   4      			 	pDir=(PDIR_STRUC)(DBUF+i);
 889   4      			 	//if(bXXGFlags.bits.bIsFat32==0)
 890   4      			 	//	ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
 891   4      			 	//else
 892   4      				 	ThisFile.StartCluster=MakeU32(DBUF[i+21],DBUF[i+20],DBUF[i+27],DBUF[i+26]);
 893   4      			 	//DelayMs(15);
 894   4      			 	if(!RBC_Write(sectorToRead,1,DBUF))
 895   4      					{
 896   5      					UartRspBlock.errcode=ERC_DEVICEERR;
 897   5      					return FALSE;	
 898   5      					}
 899   4      				//////////////////// 清除FAT中的纪录////////////////////////
 900   4      				//DelayMs(10);
 901   4      				if(!DeleteClusterLink(ThisFile.StartCluster))
 902   4      						{
 903   5      						UartRspBlock.errcode=ERC_DEVICEERR;
 904   5      						return FALSE;	
 905   5      						}
 906   4      			 	bStop=1;
 907   4      			 	break;
 908   4      			 	}
 909   3      			
 910   3      			}//end for
 911   2      		if(bStop==1)
 912   2      			break;
 913   2      		
 914   2      	       }//end search
 915   1      	
 916   1      	//////////////////////////////////////////////
 917   1      	return TRUE;
 918   1      #undef RspBlockRemoveFile
 919   1      }
 920          
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 16  

 921          unsigned char GetCapacity(void)
 922          {
 923   1      	unsigned long sectorNum,freesectorcnt;
 924   1      	unsigned int i;
 925   1      	
 926   1      #define RspBlockGetCapacity UartRspBlock.RspBlock.Rsp_GetCapacity
 927   1      	PREAD_CAPACITY_RSP pBuf;
 928   1      	
 929   1      	if(!bXXGFlags.UDiskOK)
 930   1      	{
 931   2      	UartRspBlock.errcode=ERC_NODEVICE;
 932   2      	return FALSE;		
 933   2      	}
 934   1      	///////////////////////////////////////////////////////////
 935   1      	if(!RBC_ReadCapacity())
 936   1      	{
 937   2      	UartRspBlock.errcode=ERC_DEVICEERR;
 938   2      	return FALSE;	
 939   2      	}
 940   1      	
 941   1      	pBuf=(PREAD_CAPACITY_RSP)DBUF;
 942   1      	RspBlockGetCapacity.disksize=SwapINT32((pBuf->LastLBA)*pBuf->BlockSize);
 943   1      	////////////////////////////////////////////////////////////////////////
 944   1      	if ((bXXGFlags.bIsFat32==1)&&(DeviceInfo.FSI_Free_Count>0))
 945   1      		{
 946   2      		RspBlockGetCapacity.freedisksize=SwapINT32(DeviceInfo.FSI_Free_Count*DeviceInfo.BPB_BytesPerSec*DeviceIn
             -fo.BPB_SecPerClus);
 947   2      		return TRUE;
 948   2      		}
 949   1      	///////////////////////////////////////////////	
 950   1      	sectorNum=DeviceInfo.FatStartSector;
 951   1      	freesectorcnt=0;
 952   1      	while(sectorNum<DeviceInfo.FATSz+DeviceInfo.FatStartSector)
 953   1      	{
 954   2      		
 955   2      		if(RBC_Read(sectorNum,1,DBUF))
 956   2      		{
 957   3      		  for(i=0;i<DeviceInfo.BPB_BytesPerSec;)
 958   3      		  	{
 959   4      		  	 //clusterNum++;	
 960   4      		  	if(bXXGFlags.bIsFat32==0) 
 961   4      		  		{
 962   5      		  		if((DBUF[i]==0x00)&&(DBUF[i+1]==0x00))
 963   5      		  	 		freesectorcnt++;
 964   5      		  	 	i=i+2;
 965   5      		  		}
 966   4      		  	else
 967   4      		  		{
 968   5      		  		if((DBUF[i]==0x00)&&(DBUF[i+1]==0x00)&&(DBUF[i+2]==0x00)&&(DBUF[i+3]==0x00))
 969   5      		  	 		freesectorcnt++;
 970   5      		  	 	i=i+4;
 971   5      		  		}
 972   4      		  	 
 973   4      		  	// clusterNum++;
 974   4      		  	}	
 975   3      		}
 976   2      		else
 977   2      			{
 978   3      			UartRspBlock.errcode=ERC_DEVICEERR;
 979   3      			return FALSE;	
 980   3      			}
 981   2      		sectorNum++;
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 17  

 982   2      	}
 983   1      	
 984   1      	////////////////////////////////////////////////////////////////////////
 985   1      	RspBlockGetCapacity.freedisksize=DeviceInfo.BPB_BytesPerSec*DeviceInfo.BPB_SecPerClus;
 986   1      	RspBlockGetCapacity.freedisksize=freesectorcnt*RspBlockGetCapacity.freedisksize;
 987   1      	//RspBlockGetCapacity.freedisksize=SwapINT32(RspBlockGetCapacity.disksize)-RspBlockGetCapacity.freedisksi
             -ze;
 988   1      	RspBlockGetCapacity.freedisksize=SwapINT32(RspBlockGetCapacity.freedisksize);
 989   1      		
 990   1      	return TRUE;
 991   1      #undef RspBlockGetCapacity
 992   1      }
 993          
 994          unsigned char SetFilePointer(unsigned long pointer)
 995          {
 996   1      #define RspBlockSetFilePointer UartRspBlock.RspBlock.Rsp_SetFilePointer
 997   1      	
 998   1      	//ThisFile.FilePointer=UartCmdBlock.CmdBlock.Cmd_SetFilePointer.pointer;
 999   1      	if(!bXXGFlags.UDiskOK)
1000   1      	{
1001   2      	UartRspBlock.errcode=ERC_NODEVICE;
1002   2      	return FALSE;		
1003   2      	}
1004   1      	if(!ThisFile.bFileOpen)
1005   1      	{
1006   2      	UartRspBlock.errcode=ERC_FILENOTOPENED;
1007   2      	return FALSE;		
1008   2      	}
1009   1      	///////////////////////////////////////////////////////////
1010   1      	ThisFile.pointer=pointer;
1011   1      	if(ThisFile.pointer>ThisFile.LengthInByte)
1012   1      	{
1013   2      	UartRspBlock.errcode=ERC_LENGTHEXCEED;
1014   2      	return FALSE;	
1015   2      	}
1016   1      	
1017   1      	if(!GoToPointer(ThisFile.pointer))
1018   1      	{
1019   2      	ThisFile.bFileOpen=0;
1020   2      	UartRspBlock.errcode=ERC_DEVICEERR;
1021   2      	return FALSE;	
1022   2      	}
1023   1      	//////////////////////////////////////////////
1024   1      	return TRUE;
1025   1      
1026   1      #undef RspBlockSetFilePointer
1027   1      }
1028          
1029          unsigned char GetFirmwareVersion(void)
1030          {
1031   1         #define RspBlockGetVersion UartRspBlock.RspBlock.Rsp_GetVersion
1032   1         ////////////////////////////////////////////////////////////
1033   1         RspBlockGetVersion.version=0x0402;
1034   1         return TRUE;
1035   1         #undef RspBlockGetVersion
1036   1      }
1037          /////////// 目录操作 ///////////////////////////////
1038          //#endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   6269    ----
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 18  

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =  16651      21
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2     125
   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 + -