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

📄 hpi.lst

📁 这是在SL811上实现的对U盘进行FAT32或FAT16读写的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 260   1      	PDIR_STRUC pDir;
 261   1      	
 262   1      	if(!bXXGFlags.UDiskOK)
 263   1      	{
 264   2      	UartRspBlock.errcode=ERC_NODEVICE;
 265   2      	return FALSE;		
 266   2      	}
 267   1      	///////////////////////////////////////////////////////////
 268   1      	bstop=0;
 269   1      	ThisFile.bFileOpen=0;
 270   1      	sector=0;
 271   1      	
 272   1      	dirClusterPointer=ThisDir.StartCluster;
 273   1      	//for(sector=0;sector<rootSectorCnt;sector++)
 274   1      	for(;;)
 275   1      	    {   
 276   2      		/////////////////////////////////////////////////
 277   2      		if(!SeekSectorToRead(&dirClusterPointer,&sector,&sectorToRead))
 278   2      			return FALSE;
 279   2      		//////////////////////////////////////////////////
 280   2      		/// 
 281   2      		if(!RBC_Read(sectorToRead,1,DBUF))
 282   2      			{
 283   3      			UartRspBlock.errcode=ERC_DEVICEERR;
 284   3      			return FALSE;	
 285   3      			}
 286   2      		///////////////////////////////////////////////////
 287   2      		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 288   2      			{
 289   3      			if(DBUF[i]==0x00)
 290   3      				{
 291   4      				UartRspBlock.errcode=ERC_FILENOTFOUND;
 292   4      				return FALSE;	
 293   4      				}
 294   3      			///////////////////////////////////////////
 295   3      			j=0;
 296   3      			while(DBUF[i+j]==*(pBuffer+j))
 297   3      				{
 298   4      				 j=j+1;
 299   4      				 if(j>11)
 300   4      				 	break;
 301   4      				}
 302   3      			
 303   3      			if(j>11)
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 6   

 304   3      			    {
 305   4      			    for(j=0;j<32;j++)
 306   4      			    	RspBlockOpenFile.item[j]=DBUF[i+j];
 307   4      			    //RspBlockOpenFile.result=0x1;
 308   4      			    ThisFile.bFileOpen=1;
 309   4      			    bstop=1;
 310   4      			     break;}
 311   3      			
 312   3      			}
 313   2      		///////////////////////////////////////////////////////
 314   2      		if(bstop==1)break;
 315   2      		///////////////////////////////////////////////////////
 316   2      	
 317   2      	    }
 318   1      	////////////////////////////////////////////
 319   1      	pDir=(PDIR_STRUC)RspBlockOpenFile.item;
 320   1      	if(bXXGFlags.bIsFat32==0)
 321   1      		ThisFile.StartCluster=SwapINT16(pDir->DIR_FstClusLO);
 322   1      	else
 323   1      		ThisFile.StartCluster=MakeU32(RspBlockOpenFile.item[21],RspBlockOpenFile.item[20],RspBlockOpenFile.item[
             -27],RspBlockOpenFile.item[26]);
 324   1      	ThisFile.LengthInByte=SwapINT32(pDir->DIR_FileSize);
 325   1      	ThisFile.ClusterPointer=ThisFile.StartCluster;
 326   1      	ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
 327   1      	ThisFile.OffsetofSector=0;
 328   1      	ThisFile.SectorofCluster=0;
 329   1      	ThisFile.pointer=0;
 330   1      	
 331   1      	for(j=0;j<11;j++)
 332   1      		{
 333   2      		ThisFile.FileName[j]=*(pBuffer+j);
 334   2      		}
 335   1      	///////////////////////////////////////////
 336   1      	// 读入FAT表的第一个扇区  ////////////////////
 337   1      	FreeClusterNum=DeviceInfo.FSI_Nxt_Free;
 338   1      	FreeSecNum=ThisFatSecNum(DeviceInfo.FSI_Nxt_Free);
 339   1      	if(!RBC_Read(FreeSecNum,1,CurFatSector))
 340   1      			return FALSE;	
 341   1      	///////////////////////////////////////////////
 342   1      	return TRUE;
 343   1      	
 344   1      #undef RspBlockOpenFile
 345   1      
 346   1      }
 347          
 348          unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
 349          {
 350   1      #define RspBlockReadFile UartRspBlock.RspBlock.Rsp_ReadFile
 351   1      	unsigned int idata len,i;
 352   1      	unsigned char bSuccess;
 353   1      	
 354   1      	if(!bXXGFlags.UDiskOK)
 355   1      	{
 356   2      	UartRspBlock.errcode=ERC_NODEVICE;
 357   2      	return FALSE;		
 358   2      	}
 359   1      	if(!ThisFile.bFileOpen)
 360   1      	{
 361   2      	UartRspBlock.errcode=ERC_FILENOTOPENED;
 362   2      	return FALSE;		
 363   2      	}
 364   1      	///////////////////////////////////////////////////////////
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 7   

 365   1      	ThisFile.bFileOpen=0;
 366   1      	bSuccess=1;
 367   1      	UartRspBlock.len=0;
 368   1      	
 369   1      	if(readLength>MAX_READ_LENGTH)
 370   1      		{
 371   2      		UartRspBlock.errcode=ERC_LENGTHEXCEED;
 372   2      		return FALSE;	
 373   2      		}
 374   1      	if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
 375   1      		{
 376   2      		UartRspBlock.errcode=ERC_LENGTHEXCEED;
 377   2      		return FALSE;	
 378   2      		}
 379   1      	////////////////////////////////////////////
 380   1      		
 381   1      		///////////////////////////////////////////////////
 382   1      		while(readLength>0)
 383   1      		{
 384   2      		   if(readLength+ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec)
 385   2      		   	len=DeviceInfo.BPB_BytesPerSec;
 386   2      		   else
 387   2      		   	len=readLength+ThisFile.OffsetofSector;
 388   2      		   
 389   2      		   //////////////////////////////////////////////////////
 390   2      		   if(ThisFile.OffsetofSector>0)
 391   2      		   	{
 392   3      		   	if(RBC_Read(ThisFile.SectorPointer,1,DBUF))
 393   3      		   		{
 394   4      		   		//ThisFile.OffsetofSector=len;
 395   4      		   		len=len-ThisFile.OffsetofSector;
 396   4      		   		for(i=0;i<len;i++)
 397   4      		   			//UARTBUF[i]=DBUF[ThisFile.OffsetofSector+i];
 398   4      		   			*(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
 399   4      		   		ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
 400   4      		   		}
 401   3      		   	else
 402   3      		   		{
 403   4      		   		UartRspBlock.errcode=ERC_DEVICEERR;
 404   4      				return FALSE;	
 405   4      		   		}
 406   3      		   	}
 407   2      		   else
 408   2      		   	{
 409   3      		   		if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+UartRspBlock.len))
 410   3      		   		{
 411   4      		   		UartRspBlock.errcode=ERC_DEVICEERR;
 412   4      				return FALSE;	
 413   4      		   		}
 414   3      		   		ThisFile.OffsetofSector=len;
 415   3      		   	}
 416   2      		   ////////////////////////////////////////////////////////////
 417   2      		   readLength-=len;
 418   2      		   UartRspBlock.len+=len;
 419   2      		  // ThisFile.OffsetofSector=;
 420   2      		   /////////////////////////////////////////////////////////
 421   2      		   if(ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)
 422   2      		   {	
 423   3      		   	ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
 424   3      		   	ThisFile.SectorofCluster+=1;
 425   3      		   	if(ThisFile.SectorofCluster>DeviceInfo.BPB_SecPerClus-1)
 426   3      		   	{
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 8   

 427   4      		   		ThisFile.SectorofCluster=0;
 428   4      		 		 ThisFile.ClusterPointer=GetNextClusterNum(ThisFile.ClusterPointer);
 429   4      		 		////////////???????????????????????????????????????
 430   4      		 		if(bXXGFlags.bIsFat32==0)
 431   4      		 			{
 432   5      		 			if(ThisFile.ClusterPointer>0xffef)//??????????????????????????????
 433   5      		 		 	{
 434   6      		 		 	   UartRspBlock.errcode=ERC_REACHEND;
 435   6      					   return FALSE;	
 436   6      		 		 	}
 437   5      		 			}
 438   4      		 		else
 439   4      		 			{
 440   5      		 			if(ThisFile.ClusterPointer>0x0ffffff8)//??????????????????????????????
 441   5      		 		 	{
 442   6      		 		 	   UartRspBlock.errcode=ERC_REACHEND;
 443   6      					   return FALSE;	
 444   6      		 		 	}
 445   5      		 			}
 446   4      		 		 
 447   4      		 		 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.ClusterPointer); 	
 448   4      		   	}
 449   3      		   	else
 450   3      		   		ThisFile.SectorPointer=ThisFile.SectorPointer+1;
 451   3      		    }
 452   2      		   //////////////////////////////////////////////////////////////////
 453   2      		}//end while
 454   1      	
 455   1      	
 456   1      	ThisFile.bFileOpen=1;
 457   1      	ThisFile.pointer+=UartRspBlock.len;
 458   1      	//////////////////////////////////////////////
 459   1      	RspBlockReadFile.readLength=SwapINT16(UartRspBlock.len);
 460   1      	return TRUE;
 461   1      #undef RspBlockReadFile
 462   1      }
 463          
 464          unsigned char CreateFile(unsigned char *pBuffer)
 465          {
 466   1      // len+*name()+attrribute+year+month+date+hour+minute+second
 467   1      #define RspBlockCreateFile UartRspBlock.RspBlock.Rsp_CreateFile
 468   1      	//unsigned long sectorNum;
 469   1      	unsigned int i,j,sector;
 470   1      	unsigned char bstop;
 471   1      	unsigned long sectorToRead,dirClusterPointer;
 472   1      	//PDIR_INFO pDirInfo;
 473   1      	PDIR_STRUC pDir;
 474   1      	//unsigned char xdata fileDir[128];
 475   1      	
 476   1      	if(!bXXGFlags.UDiskOK)
 477   1      	{
 478   2      	UartRspBlock.errcode=ERC_NODEVICE;
 479   2      	return FALSE;		
 480   2      	}
 481   1      	///////////////////////////////////////////////////////////
 482   1      	pDir=(PDIR_STRUC)pBuffer;
 483   1      	pDir->DIR_FstClusHI=0x0000;
 484   1      	pDir->DIR_FstClusLO=0x0000;
 485   1      	pDir->DIR_FileSize=0;
 486   1      	/////// Search a free space in the root dir space and build the item ///
 487   1      	ThisFile.bFileOpen=0;
 488   1      	bstop=0;
C51 COMPILER V6.20c  HPI                                                                   04/07/2005 10:50:50 PAGE 9   

 489   1      	sector=0;
 490   1      	dirClusterPointer=ThisDir.StartCluster;
 491   1      	//for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
 492   1      	for(;;)
 493   1      	    {   
 494   2      		///////////////////////////////////////////////////
 495   2      		if(!SeekSectorToRead(&dirClusterPointer,&sector,&sectorToRead))
 496   2      			return FALSE;
 497   2      		//////////////////////////////////////////////////
 498   2      		if(!RBC_Read(sectorToRead,1,DBUF))
 499   2      			{
 500   3      			
 501   3      			UartRspBlock.errcode=ERC_DEVICEERR;
 502   3      				return FALSE;	
 503   3      			}
 504   2      		///////////////////////////////////////////////////
 505   2      		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
 506   2      			{
 507   3      			if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
 508   3      				{
 509   4      				///////////////////////////////////////
 510   4      				for(j=0;j<32;j++)
 511   4      					DBUF[i+j]=*(pBuffer+j);
 512   4      				///////////////////////////////////////
 513   4      				if(!RBC_Write(sectorToRead,1,DBUF))
 514   4      		  	 		{
 515   5      		  	 		UartRspBlock.errcode=ERC_DEVICEERR;
 516   5      					return FALSE;	
 517   5      		  	 		}
 518   4      				bstop=1;
 519   4      				break;
 520   4      				}
 521   3      			}
 522   2      		///////////////////////////////////////////////////////
 523   2      		if(bstop==1)break;
 524   2      		
 525   2      	    }
 526   1      	/////////////////////////////////////////////

⌨️ 快捷键说明

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