my_data.c 6.93 KB
#include "math.h"

#include "hardware.h"
#include "Slam.h"




void ReadFromRom(void)//读FLASH
{
	int ArealIndex=0;
	u8 W25QXX_BUFFER[W25QXX_WRLength];	//写用数组	
	u8 i;
	W25QXX_Read(W25QXX_BUFFER,100+ArealIndex*65536,W25QXX_WRLength);	
	if(  (W25QXX_BUFFER[0]==0xAA) && ((W25QXX_BUFFER[W25QXX_WRLength-1]==Sum_Crc(W25QXX_BUFFER,W25QXX_WRLength-1,0))|Ceshi[26]) )
	{
			memcpy(F_Agvname,W25QXX_BUFFER+1,8);	
		
			memcpy(F_lwip.ip_Loca,W25QXX_BUFFER+9,4);
			memcpy(F_lwip.netmask,W25QXX_BUFFER+13,4);
			memcpy(F_lwip.gateway,W25QXX_BUFFER+17,4);	
			memcpy(&F_lwip.ip_Remo,W25QXX_BUFFER+21,4);	
			memcpy(&F_lwip.Port_Remo,W25QXX_BUFFER+25,2);	
		
			memcpy(&F_CharDir,W25QXX_BUFFER+27,1);
		
			memcpy(&F_Dx_AgvCToMap,W25QXX_BUFFER+28,4);	
			memcpy(&F_Dy_AgvCToMap,W25QXX_BUFFER+32,4);	
		  memcpy(&F_DAng_AgvCToMap,W25QXX_BUFFER+36,2);	
		
			memcpy(&F_OverrideGo_KZ,W25QXX_BUFFER+38,1);	
			memcpy(&F_OverrideGo_FZ,W25QXX_BUFFER+39,1);	
			memcpy(&F_OverrideUP,W25QXX_BUFFER+40,1);	
			memcpy(&F_OverrideDown,W25QXX_BUFFER+41,1);	

			memcpy(&CCD_M[0].X_Delta,W25QXX_BUFFER+42,1);	
			memcpy(&CCD_M[0].Y_Delta,W25QXX_BUFFER+43,1);	
			memcpy(&CCD_M[0].Ang_Delta,W25QXX_BUFFER+44,1);	
		
			memcpy(&F_WheelTy,W25QXX_BUFFER+45,1);	
 			memcpy(&F_DirInstall_CCD,W25QXX_BUFFER+46,1);
 			memcpy(&F_OverrideConvey_A,W25QXX_BUFFER+47,1);
			
 			memcpy(&F_XDis_Helm,W25QXX_BUFFER+50,4);	
 			memcpy(&F_YDis_Helm,W25QXX_BUFFER+54,4);	
 			memcpy(&F_DX_ScanLaInstall,W25QXX_BUFFER+58,4);	
 			memcpy(&F_DY_ScanLaInstall,W25QXX_BUFFER+62,4);	
			
			for(i=0;i<MaxMotNums;i++)
			{ Motor[i].Y=VaIndexB_R(&W25QXX_BUFFER[66],i);}
//	
// 			memcpy(&Motor[0].Y,W25QXX_BUFFER+66,1);				
// 			memcpy(&Motor[5].Y,W25QXX_BUFFER+67,1);				
 			memcpy(&F_AgvContr,W25QXX_BUFFER+68,4);	
 			memcpy(&F_HighInit,W25QXX_BUFFER+72,2);				
 			memcpy(&F_WeightInitVa,W25QXX_BUFFER+74,2);				
 			memcpy(&Motor[0].PulseS_Unit,W25QXX_BUFFER+76,2);					
 			memcpy(&Motor[0].Max_rpm,W25QXX_BUFFER+78,2);				
 			memcpy(&Motor[1].PulseS_Unit,W25QXX_BUFFER+80,2);					
 			memcpy(&Motor[1].Max_rpm,W25QXX_BUFFER+82,2);
 			memcpy(&Motor[2].PulseS_Unit,W25QXX_BUFFER+84,2);					
 			memcpy(&Motor[2].Max_rpm,W25QXX_BUFFER+86,2);
 			memcpy(&Motor[5].PulseS_Unit,W25QXX_BUFFER+88,2);					
 			memcpy(&Motor[5].Max_rpm,W25QXX_BUFFER+90,2);			
 			memcpy(&HighMax,W25QXX_BUFFER+92,2);	
 			memcpy(&Highmin,W25QXX_BUFFER+94,2);	
			memcpy(&F_WeightMax,W25QXX_BUFFER+96,2);
			memcpy(&F_ConveyDir,W25QXX_BUFFER+98,1);
			
			memcpy(&F_OverrideGo_M,W25QXX_BUFFER+99,1);
			memcpy(&F_OverrideUD_M,W25QXX_BUFFER+100,1);
			memcpy(&F_OverrideCW_M,W25QXX_BUFFER+101,1);
			memcpy(&F_OverrideConvey_M,W25QXX_BUFFER+102,1);			
			memcpy(F_LaPic,W25QXX_BUFFER+103,8);	

			memcpy(&CCD_M[1].X_Delta,W25QXX_BUFFER+111,1);	
			memcpy(&CCD_M[1].Y_Delta,W25QXX_BUFFER+112,1);	
			memcpy(&CCD_M[1].Ang_Delta,W25QXX_BUFFER+113,1);
			memcpy(&F_Music_Voice,W25QXX_BUFFER+114,1);
 			memcpy(&F_Ang_HelmZerToAgvX,W25QXX_BUFFER+115,2);
			
			Set_ErrID(22,0);			
	}
	else Set_ErrID(22,1);//ErrID=22;读取XML校验码错误
 	Value2Init();		
	
/*调节偏差值*/
	ArealIndex=1;	
	memset(W25QXX_BUFFER,0,W25QXX_WRLength);
	W25QXX_Read(W25QXX_BUFFER,100+ArealIndex*65536,W25QXX_WRLength);
	if(  (W25QXX_BUFFER[0]==0xAA) && (W25QXX_BUFFER[W25QXX_WRLength-1]==Sum_Crc(W25QXX_BUFFER,W25QXX_WRLength-1,0)) )
	{		
		memcpy(&F_AdjustPArr[0].Value,W25QXX_BUFFER+1,sizeof(F_AdjustPArr));			
	}



	
	
//	printf("读取数据");
}

void WriteToRom(void)//写FLASH
{
	int ArealIndex;
  u8 W25QXX_BUFFER[W25QXX_WRLength];	//写用数组	
	u8 i;
	
	ArealIndex=0;		
	memset(W25QXX_BUFFER,0,W25QXX_WRLength);
	W25QXX_BUFFER[0]=0xAA;
	memcpy(W25QXX_BUFFER+1,&F_Agvname,8);
	
	memcpy(W25QXX_BUFFER+9,&F_lwip.ip_Loca,4);
	memcpy(W25QXX_BUFFER+13,&F_lwip.netmask,4);
	memcpy(W25QXX_BUFFER+17,&F_lwip.gateway,4);	
	memcpy(W25QXX_BUFFER+21,&F_lwip.ip_Remo,4);	
	memcpy(W25QXX_BUFFER+25,&F_lwip.Port_Remo,2);	
	
	memcpy(W25QXX_BUFFER+27,&F_CharDir,1);	
	
	memcpy(W25QXX_BUFFER+28,&F_Dx_AgvCToMap,4);	
	memcpy(W25QXX_BUFFER+32,&F_Dy_AgvCToMap,4);
  memcpy(W25QXX_BUFFER+36,&F_DAng_AgvCToMap,2);
	
	memcpy(W25QXX_BUFFER+38,&F_OverrideGo_KZ,1);	
	memcpy(W25QXX_BUFFER+39,&F_OverrideGo_FZ,1);		
	memcpy(W25QXX_BUFFER+40,&F_OverrideUP,1);
	memcpy(W25QXX_BUFFER+41,&F_OverrideDown,1);
	
	memcpy(W25QXX_BUFFER+42,&CCD_M[0].X_Delta,1);		
	memcpy(W25QXX_BUFFER+43,&CCD_M[0].Y_Delta,1);
	memcpy(W25QXX_BUFFER+44,&CCD_M[0].Ang_Delta,1);
	
 	memcpy(W25QXX_BUFFER+45,&F_WheelTy,1);
	memcpy(W25QXX_BUFFER+46,&F_DirInstall_CCD,1);
	memcpy(W25QXX_BUFFER+47,&F_OverrideConvey_A,1);
	
	memcpy(W25QXX_BUFFER+50,&F_XDis_Helm,4);
	memcpy(W25QXX_BUFFER+54,&F_YDis_Helm,4);
	memcpy(W25QXX_BUFFER+58,&F_DX_ScanLaInstall,4);
	memcpy(W25QXX_BUFFER+62,&F_DY_ScanLaInstall,4);
	for(i=0;i<MaxMotNums;i++)
	{ VaIndexB_W(&W25QXX_BUFFER[66],i,Motor[i].Y);}
										
//	memcpy(W25QXX_BUFFER+66,&Motor[0].Y,1);	
//	memcpy(W25QXX_BUFFER+67,&Motor[5].Y,1);	
	memcpy(W25QXX_BUFFER+68,&F_AgvContr,4);	
	memcpy(W25QXX_BUFFER+72,&F_HighInit,2);	
	memcpy(W25QXX_BUFFER+74,&F_WeightInitVa,2);
	memcpy(W25QXX_BUFFER+76,&Motor[0].PulseS_Unit,2);
	memcpy(W25QXX_BUFFER+78,&Motor[0].Max_rpm,2);
	memcpy(W25QXX_BUFFER+80,&Motor[1].PulseS_Unit,2);
	memcpy(W25QXX_BUFFER+82,&Motor[1].Max_rpm,2);
	memcpy(W25QXX_BUFFER+84,&Motor[2].PulseS_Unit,2);
	memcpy(W25QXX_BUFFER+86,&Motor[2].Max_rpm,2);
	memcpy(W25QXX_BUFFER+88,&Motor[5].PulseS_Unit,2);
	memcpy(W25QXX_BUFFER+90,&Motor[5].Max_rpm,2);
	memcpy(W25QXX_BUFFER+92,&HighMax,2);
	memcpy(W25QXX_BUFFER+94,&Highmin,2);
	memcpy(W25QXX_BUFFER+96,&F_WeightMax,2);		
	memcpy(W25QXX_BUFFER+98,&F_ConveyDir,1);
	
	memcpy(W25QXX_BUFFER+99,&F_OverrideGo_M,1);	
	memcpy(W25QXX_BUFFER+100,&F_OverrideUD_M,1);	
	memcpy(W25QXX_BUFFER+101,&F_OverrideCW_M,1);	
	memcpy(W25QXX_BUFFER+102,&F_OverrideConvey_M,1);	
	memcpy(W25QXX_BUFFER+103,F_LaPic,8);	

	memcpy(W25QXX_BUFFER+111,&CCD_M[1].X_Delta,1);		
	memcpy(W25QXX_BUFFER+112,&CCD_M[1].Y_Delta,1);
	memcpy(W25QXX_BUFFER+113,&CCD_M[1].Ang_Delta,1);
	memcpy(W25QXX_BUFFER+114,&F_Music_Voice,1);
	memcpy(W25QXX_BUFFER+115,&F_Ang_HelmZerToAgvX,2);
	
						
	W25QXX_BUFFER[W25QXX_WRLength-1]=Sum_Crc(W25QXX_BUFFER,W25QXX_WRLength-1,0);
	W25QXX_EraserWrite(W25QXX_BUFFER,100+ArealIndex*65536,W25QXX_WRLength);
	OSTimeDly(2);
	
	
	/*调节偏差值*/
	ArealIndex=1;	
	memset(W25QXX_BUFFER,0,W25QXX_WRLength);
	W25QXX_BUFFER[0]=0xAA;	
 	memcpy(W25QXX_BUFFER+1,&F_AdjustPArr[0].Value,sizeof(F_AdjustPArr));	
	


	W25QXX_BUFFER[W25QXX_WRLength-1]=Sum_Crc(W25QXX_BUFFER,W25QXX_WRLength-1,0);
	W25QXX_EraserWrite(W25QXX_BUFFER,100+ArealIndex*65536,W25QXX_WRLength);
	OSTimeDly(2);

}



u8 WRPB;
void WriteReadPersistent(void)//读写操控函数
{
						
		if((Ceshi[27]==1)|((SysKey==245)&&VaIndexDW_R(&Touch_Contr,3)))
		{ Ceshi[27]=0;
			if(VaIndexB_R(&WRPB,1)==0)
			{ WriteToRom();
				VaIndexB_W(&WRPB,1,1);
			}
		}
		else VaIndexB_W(&WRPB,1,0);
		
		if( (Ceshi[28]==1)|((SysKey==245)&&VaIndexDW_R(&Touch_Contr,0)) )
		{	Ceshi[28]=0;
			if( VaIndexB_R(&WRPB,2)==0 )
			{ ReadFromRom();				
				VaIndexB_W(&WRPB,2,1);
			}
		}
		else VaIndexB_W(&WRPB,2,0);

		



}