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

📄 sub_c.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
				if(k==1)	Secter_One=1;
				else
				{
					if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>=7)
						&&(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<=16)	)
					{
						k=0;
						for(i=0;i<gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2];i++)
						{
							if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]>'9')
							    ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]<'0')  )
							{
								if(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]=='.');
								else
								{
									k=1;break;
								}
							}
						}
						if(k==1)	Secter_One=1;
					}
				}
			}
		}
		else if(Add_Sector==FLASH_INFO2_ONE_2)
		{
			gON_OFF_Temp2 = gGeneral_Buffer[ON_OFF_V3_2];
			if(gON_OFF_Temp2==0xFF);
			else		Secter_Two=1;

			k=	gGeneral_Buffer[WATCH_F_2];
			if(k==0xFF);
			else		Secter_Two=1;

			k=	gGeneral_Buffer[RESET_NUM_2];
			if(k==0xFF);
			else		Secter_Two=1;

			nTCP = gGeneral_Buffer[TCP_TIMER_2];
			nTCP <<= 8;
			nTCP += gGeneral_Buffer[TCP_TIMER_2+1];
			if( (nTCP>0)&&(nTCP<0xFFFF) );
			else		Secter_Two=1;
		}
	}
	else
	{
		Secter_One=2;
	}
	/////////////////////////////////////////////////////////////
	OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
	j=ReadByteFromBuffer2(0);
	gGeneral_Buffer[0]=j;
	for(i=1;i<254;i++)
	{
		gGeneral_Buffer[i]=ReadNextFromBuffer2();
		j+=gGeneral_Buffer[i];
	}
	gGeneral_Buffer[254]=ReadNextFromBuffer2();
	gGeneral_Buffer[255]=ReadNextFromBuffer2();
	OperateSPIEnd();
	if( ((j/256)==gGeneral_Buffer[254]) && ((j%256)==gGeneral_Buffer[255]) )
	{
		if(Add_Sector==FLASH_INFO1_ONE_2)
		{
			if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2]>16)
				||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>16)
				||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<7) )
			{
				Secter_Two=1;
			}
			else if(gGeneral_Buffer[TARGET_NUMBER1_F_2]<=16)
			{
				k=0;
				for(i=0;i<gGeneral_Buffer[TARGET_NUMBER1_F_2];i++)
				{
					if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]>'9')
						||(gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]<'0')	)
					{
						k=1;break;
					}
				}
				if(k==1)	Secter_Two=1;
				else
				{
					if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>=7)
						&&(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<=16)	)
					{
						k=0;
						for(i=0;i<gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2];i++)
						{
							if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]>'9')
							    ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]<'0')  )
							{
								if(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]=='.');
								else
								{
									k=1;break;
								}
							}
						}
						if(k==1)	Secter_Two=1;
					}
				}
			}
		}
		else if(Add_Sector==FLASH_INFO2_ONE_2)
		{
			gON_OFF_Temp2 = gGeneral_Buffer[ON_OFF_V3_2];
			if(gON_OFF_Temp2==0xFF);
			else		Secter_Two=1;

			k=	gGeneral_Buffer[WATCH_F_2];
			if(k==0xFF);
			else		Secter_Two=1;

			k=	gGeneral_Buffer[RESET_NUM_2];
			if(k==0xFF);
			else		Secter_Two=1;

			nTCP = gGeneral_Buffer[TCP_TIMER_2];
			nTCP <<= 8;
			nTCP += gGeneral_Buffer[TCP_TIMER_2+1];
			if( (nTCP>0)&&(nTCP<0xFFFF) );
			else		Secter_Two=1;
		}
	}
	else
	{
		Secter_Two=2;
	}
	///////////////////////////////////////////////////////////
	//显示一下两个数据
	Send_COM1_Byte('[');
	Send_COM1_Byte(ASCII(Secter_One/10));
	Send_COM1_Byte(ASCII(Secter_One%10));
	Send_COM1_Byte(':');
	Send_COM1_Byte(ASCII(Secter_Two/10));
	Send_COM1_Byte(ASCII(Secter_Two%10));
	Send_COM1_Byte(']');

	if(Secter_One==0)
	{
		if( (Secter_Two==1)||(Secter_Two==2) )
		{
			OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector);OperateSPIEnd();
			Clear_Exter_WatchDog();
			P6OUT|=SPI45DB041_WP;
			WriteBuffer2ToPage(Add_Sector+1);
			OperateSPIEnd();
			P6OUT&=~SPI45DB041_WP;
			gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
		}
	}
	else if(Secter_One==2)
	{
		if( (Secter_Two==0) )
		{
			OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
			Clear_Exter_WatchDog();
			P6OUT|=SPI45DB041_WP;
			WriteBuffer2ToPage(Add_Sector);
			OperateSPIEnd();
			P6OUT&=~SPI45DB041_WP;
			gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
		}
		else if( (Secter_Two==1)||(Secter_Two==2) )
		{
			if(Add_Sector==FLASH_INFO1_ONE_2)
			{
				Read_SegAB(0);
				if(gGeneral_Buffer[127]==0xAA)
				{
					for(i=128;i<254;i++)	gGeneral_Buffer[i]=0xFF;
					WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
					for(i=1;i<254;i++)
					{
						WriteNextByteToBuffer2(gGeneral_Buffer[i]);
					}
					OperateSPIEnd();
					RFlash_Sector(FLASH_INFO1_ONE_2);
				}
			}
			else if(Add_Sector==FLASH_INFO2_ONE_2)
			{
				Read_SegAB(1);
				if(gGeneral_Buffer[127]==0xAA)
				{
					for(i=128;i<254;i++)	gGeneral_Buffer[i]=0xFF;
					WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
					for(i=1;i<254;i++)
					{
						WriteNextByteToBuffer2(gGeneral_Buffer[i]);
					}
					OperateSPIEnd();
					RFlash_Sector(FLASH_INFO2_ONE_2);
				}
			}
		}
	}
	else if(Secter_One==1)
	{
		if(Secter_Two==0)
		{
			OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
			Clear_Exter_WatchDog();
			P6OUT|=SPI45DB041_WP;
			WriteBuffer2ToPage(Add_Sector);
			OperateSPIEnd();
			P6OUT&=~SPI45DB041_WP;
			gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
		}
		else if( (Secter_Two==1)||(Secter_Two==2) )
		{
			if(Add_Sector==FLASH_INFO1_ONE_2)
			{
				Read_SegAB(0);
				if(gGeneral_Buffer[127]==0xAA)
				{
					for(i=128;i<254;i++)	gGeneral_Buffer[i]=0xFF;
					WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
					for(i=1;i<254;i++)
					{
						WriteNextByteToBuffer2(gGeneral_Buffer[i]);
					}
					OperateSPIEnd();
					RFlash_Sector(FLASH_INFO1_ONE_2);
				}
			}
			else if(Add_Sector==FLASH_INFO2_ONE_2)
			{
				Read_SegAB(1);
				if(gGeneral_Buffer[127]==0xAA)
				{
					for(i=128;i<254;i++)	gGeneral_Buffer[i]=0xFF;
					WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
					for(i=1;i<254;i++)
					{
						WriteNextByteToBuffer2(gGeneral_Buffer[i]);
					}
					OperateSPIEnd();
					RFlash_Sector(FLASH_INFO2_ONE_2);
				}
			}
		}
	}
	if(Secter_One==0)
	{
		iAddress=Add_Sector;
		Sec_Vaild=1;
	}
	else if(Secter_Two==0)
	{
		iAddress=Add_Sector+1;
		Sec_Vaild=1;
	}
	else
	{
		Sec_Vaild=0;
	}
	if(Sec_Vaild==1)
	{
		if(Add_Sector==FLASH_INFO1_ONE_2)
		{
			Read_SegAB(0);
			if(gGeneral_Buffer[127]!=0xAA)
			{
				//OperateSPIEnd();ReadOnePageToBuffer2(iAddress);OperateSPIEnd();
				Init_Buffer2();
				Deal_Sector(iAddress);
				Re430_Flash(0);
				Init_Buffer2();
			}
		}
		else if(Add_Sector==FLASH_INFO2_ONE_2)
		{
			Read_SegAB(1);
			if(gGeneral_Buffer[127]!=0xAA)
			{
				//OperateSPIEnd();ReadOnePageToBuffer2(iAddress);OperateSPIEnd();
				Init_Buffer2();
				Deal_Sector(iAddress);
				Re430_Flash(1);
				Init_Buffer2();
			}
		}
	}
}
/********************************************************\
*	函数名:RFlash_Sector()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
void RFlash_Sector(unsigned int Sector)
{
	Page_R_Write_Check(Sector);
	gTimer=0;
	while(gTimer<1100){Clear_Exter_WatchDog();}
	OperateSPIEnd();
	P6OUT|=SPI45DB041_WP;
	WriteBuffer2ToPage(Sector+1);
	P6OUT&=~SPI45DB041_WP;
	OperateSPIEnd();
	gTimer=0;
	while(gTimer<1000){Clear_Exter_WatchDog();}
}
/********************************************************\
*	函数名:Waiting_Allow_Send()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
\********************************************************/
void Waiting_Allow_Send(void)
{
	gTimer=0;
	while(1)
	{
		Clear_Exter_WatchDog();
		if( 	(gHandle_Receive_Over>20)
			  &&(gDisp_Receive_Over>20)
			  &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
			  &&(gGPS_Receive_Over>20)
			  &&(gReceive1_Over_Count>20)  )
			{
			  	break;
			}

		if( gTimer>500 )
		{
			break;
		}
	}
}

/********************************************************\
*	函数名:Do_Par()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
\********************************************************/
void Do_Par(void)
{
	unsigned int i,j,k;
	unsigned char Check_Data=0;
	unsigned char cNum1,cNum2,cNum3;
	//处理车型,类别,组别,车号
	gType = gGeneral_Buffer[1+9];
	gKind = gGeneral_Buffer[1+10];
	gGroup = gGeneral_Buffer[1+11];
	gVID  = gGeneral_Buffer[1+12];
	gVID <<= 8;
	gVID += gGeneral_Buffer[1+13];
	//处理目标号码1(存储在buffer1相应的缓冲区,第一个字节存储整个目标号码的长度,不包括长度本身这个字节)
	//如果目标号码1带有+,则需要把+号也存储在相应的区域'+'=2B
	i=1+14;
	while(1)
	{
		if(gGeneral_Buffer[i]==0x00)	break;
		i++;
		if(i>1+14+15) return;
		//这里的15表示目标号码1不会超过15个数
	}
	//计算这个目标号码1的长度(包括如果前面有'+'的话,也一样要计算在内)
	cNum1=i-(1+14);
	//如果目标号码1的长度没有超过15,则目标号码有效
	if( (i<=1+14+15)&&(cNum1>0) )
	{
		//计算出此目标号码1的号码长度并写入buffer1中相应的位置
		SRAM_Init();
		SRAM_Write(TARGET_NUMBER1_2+0,cNum1);
		Check_Data=0;
		for(j=1+14;j<i;j++)
		{
			SRAM_Write(TARGET_NUMBER1_2+j-14,gGeneral_Buffer[j]);
			Check_Data += gGeneral_Buffer[j];
		}
		SRAM_Write(TARGET_NUMBER1_CHECK_2,Check_Data);
		gGeneral_Flag|=NUM1_VAILD_F_1;
		if(gGeneral_Buffer[1+14]=='0')
		{
			gGeneral_Flag&=~NUM1_VAILD_F_1;
		}
	}
	OperateSPIEnd();
	//处理目标号码2(存储在buffer1相应的缓冲区,第一个字节存储整个目标号码的长度)
	//程序运行到这里i所表示的意义为gGeneral_Buffer[i]=0x00;
	//如果目标号码1带有+,则需要把+号也存储在相应的区域
	j=i+1;
	while(1)
	{
		if(gGeneral_Buffer[j]==0x00)	break;
		j++;if(j>i+1+15)	return;
	}
	cNum2=j-i;
	if( (j<=i+1+15)&&(cNum2>0) )
	{
	}
	OperateSPIEnd();
	k=j+1;
	while(1)
	{
		if(gGeneral_Buffer[k]==0x00)	break;
		k++;if(k>j+1+15)	return;
	}
	cNum3=k-j;
	if( (k<=j+1+15)&&(cNum3>0) )
	{
	}
	OperateSPIEnd();
	//延长一定时间
	gTimer=0;Clear_Exter_WatchDog();
	while(gTimer<100){}

⌨️ 快捷键说明

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