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

📄 klinecomm.c

📁 基于16位单片机的符合osek标准的操作系统
💻 C
📖 第 1 页 / 共 4 页
字号:
			CommunicationFlag2=0;
			CommunicationFlag3=0;
		}	 	
	}
	if(G_bSendEnble)
	{
		G_n8ByteInter++;
		if(G_n8ByteInter==4)
		{
			G_n8ByteInter=0;
			ActivateTask(KlineCommunicationTask);
		//	bBasicTask28Ready=1;//trigger K_line communication send data
	//		G_un32SYSTaskPriority[2]=100;//触发K线发送任务
		}
	}	
}
/******************************************************************************
Function Name	:	CheckSum
Engineer		:	Manda
Date			:	12/12/2005

Arguments		:	none
                  
Return			:	none

Notes			:	This function  calculates the byte of check sum of a response message.
******************************************************************************/
unsigned char CheckSum()
{
	unsigned int i=0;
	unsigned int data=0;
	while(i<=G_un16ResponseMLength-2)
	{
		data+=G_uc8ResponseMessage[i];  
		i++;
	}
	return(data&0x00ff);// checksum of G_uc8ResponseMessage[]. 
}

/******************************************************************************
Function Name	:	CreatRespMesKWP2000
Engineer		:	Manda
Date			:	12/12/2005

Arguments		:	none
                  
Return			:	none

Notes			:	This function  creats response message according to KWP2000 Protocol
******************************************************************************/
void CreatRespMesKWP2000()
{
	unsigned int i;
//	unsigned int reindex;
	if(bStartFlag)    //Message of start communication
    {
		G_uc8ResponseMessage[0]=0x83;
	 	G_uc8ResponseMessage[3]=0xc1;
	 	G_uc8ResponseMessage[4]=0xea;// add. length byte  0xe9 NO
	 	G_uc8ResponseMessage[5]=0x8f;
	 	G_un16ResponseMLength=7;
	 	G_uc8ResponseMessage[6]=CheckSum();//0xc4? 0xbe
		bStartFlag=0;
		G_bSendReady=1;
	}
	if(bStopFlag)  //Message of stop communication
    {
		G_uc8ResponseMessage[0]=0x81;
	 	G_uc8ResponseMessage[3]=0xc2;
	 	G_uc8ResponseMessage[4]=0x45;
	 	G_un16ResponseMLength=5;
		bStopFlag=0;
		G_bSendReady=1;
	}
	if(bAccessTimingFlag)
	{
		
	}
	if(bHandshakeFlag)  //Message of tester present communication
    { 
    	G_uc8ResponseMessage[0]=0x81;
	 	G_uc8ResponseMessage[3]=0x7e;
	 	G_uc8ResponseMessage[4]=0x01;
		G_un16ResponseMLength=5;
		bHandshakeFlag=0;
		G_bSendReady=1;
	}
/*	if(bReadDTCBySFlag)
	{
		if(G_bReceiveComplete)
		{
		//	DTCTable();
			G_un8DTCNum=0;
			for(i=0;i<DTCNUM;i++)
			{
				if(DTC_Table[i]!=0)
					G_un8DTCNum++;   //故障码数
			}
		} 	
	    if(G_un8DTCNum<21)
	    {
	        G_uc8ResponseMessage[0]=0x80+2+3*G_un8DTCNum;
	        G_uc8ResponseMessage[3]=0x58;
	        G_uc8ResponseMessage[4]=G_un8DTCNum;
	        G_un16ResponseMLength=3*G_un8DTCNum+6;
	        reindex=5;G_un8DTCNum=0;
	    }
	     else
	    {	
	    	G_uc8ResponseMessage[0]=0x80;
	        G_uc8ResponseMessage[3]=2+3*G_un8DTCNum;
	        G_uc8ResponseMessage[4]=0x58;
	        G_uc8ResponseMessage[5]=G_un8DTCNum;
	        G_un16ResponseMLength=3*G_un8DTCNum+7;
	        reindex=6;G_un8DTCNum=0;
	    }  
		for(i=0;i<DTCNUM;i++)
		{
			
	   		 if(DTC_Table[i])
			 { 
		         G_uc8ResponseMessage[reindex]=DTC_Table[i]>>8;
			     G_uc8ResponseMessage[reindex+1]=DTC_Table[i]&0x00ff;
			     G_uc8ResponseMessage[reindex+2]=0;//_DTCStatus.Byte;//0xe3;DTCStatus
			     reindex+=3;
			 }
		}
		
		G_uc8ResponseMessage[G_un16ResponseMLength-1]=CheckSum();// checksum 
		bReadDTCBySFlag=0;
		G_bSendReady=1;		
	}
	if(bClearFlag)  // Clear/reset emission-related diagnostic information
    {	
		if(1)//G_un8Mode==MODE_STOP)  //under the condition of the ignition ON and  the engine not running.
		{
			
			for(i=0;i<DTCNUM;i++)
			{
				DTCStatusFlag[i].Bits.PendingFaultPresent=0;
				DTCStatusFlag[i].Bits.ValidatedFaultPresent=0;
				DTCStatusFlag[i].Bits.DTCStorageState=0;
			}
		//	DTCTable();
			
			//DisableInterrupts;
			SectorEraseEeprom(&EEPROM_DTCTab,DTCNUM);
			//SectorEraseEeprom(&EEPROM_SelfDTCTab,(unsigned int)(DTCNUM/2));
			//EnableInterrupts;
			
	    	G_uc8ResponseMessage[0]=0x83;
		 	G_uc8ResponseMessage[3]=0x54;
		 	G_uc8ResponseMessage[4]=0x00;
		 	G_uc8ResponseMessage[5]=0x00;
		 	G_un16ResponseMLength=7;
		 	G_uc8ResponseMessage[6]=CheckSum();
			bClearFlag=0;
			G_bSendReady=1;
			
		}
		else      // under other conditions
		{
			bCondNotCorrect=1;
			G_uc8ResponseMessage[0]=0x83;
			G_uc8ResponseMessage[3]=0x7f;
			G_uc8ResponseMessage[4]=0x54;
			G_uc8ResponseMessage[5]=0x22;
			G_un16ResponseMLength=7;
			G_uc8ResponseMessage[6]=CheckSum();//0x2a
			G_bSendReady=1;
		}
	}	*/			
	if(bReadDataLIDFlag)   //Read Data By Local Identifier service
	{
		unsigned int scalingtemp;
		G_bReceiveComplete=1;
    	G_uc8ResponseMessage[3]=0x61;
    	G_uc8ResponseMessage[4]=G_ReadDataPID;
    	switch(G_ReadDataPID)
		{
			case 0x01:
				G_uc8ResponseMessage[0]=0x9f;
				G_uc8ResponseMessage[5]=KLineData01_1;//发动机状态
				G_uc8ResponseMessage[6]=KLineData01_2;//
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData01_3>>8);///
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData01_3&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData01_4>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData01_4&0x00ff);//	
				scalingtemp=(unsigned int)(KLineData01_5*10);
				G_uc8ResponseMessage[11]=(unsigned char)(scalingtemp>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(scalingtemp&0x00ff);//
				scalingtemp=(unsigned int)(KLineData01_6*10);//
				G_uc8ResponseMessage[13]=(unsigned char)(scalingtemp>>8);//
				G_uc8ResponseMessage[14]=(unsigned char)(scalingtemp&0x00ff);//
				scalingtemp=(unsigned int)(KLineData01_7*10);//
				G_uc8ResponseMessage[15]=(unsigned char)(scalingtemp>>8);//
				G_uc8ResponseMessage[16]=(unsigned char)(scalingtemp&0x00ff);//
				G_uc8ResponseMessage[17]=(unsigned char)(KLineData01_8>>8);//
				G_uc8ResponseMessage[18]=(unsigned char)(KLineData01_8&0x00ff);//
				G_uc8ResponseMessage[19]=(unsigned char)(KLineData01_9>>8);//
				G_uc8ResponseMessage[20]=(unsigned char)(KLineData01_9&0x00ff);//
				scalingtemp=(unsigned int)(KLineData01_10*10);//
				G_uc8ResponseMessage[21]=(unsigned char)(scalingtemp>>8);//
				G_uc8ResponseMessage[22]=(unsigned char)(scalingtemp&0x00ff);//
				G_uc8ResponseMessage[23]=(unsigned char)(KLineData01_11>>8);//
				G_uc8ResponseMessage[24]=(unsigned char)(KLineData01_11&0x00ff);//
				G_uc8ResponseMessage[25]=(unsigned char)(KLineData01_12>>8);//
				G_uc8ResponseMessage[26]=(unsigned char)(KLineData01_12&0x00ff);//
				G_uc8ResponseMessage[27]=(unsigned char)(KLineData01_13>>8);//
				G_uc8ResponseMessage[28]=(unsigned char)(KLineData01_13&0x00ff);//
				G_uc8ResponseMessage[29]=(unsigned char)(KLineData01_14>>8);//
				G_uc8ResponseMessage[30]=(unsigned char)(KLineData01_14&0x00ff);//
				G_uc8ResponseMessage[31]=(unsigned char)(KLineData01_15>>8);//
				G_uc8ResponseMessage[32]=(unsigned char)(KLineData01_15&0x00ff);//
				G_uc8ResponseMessage[33]=KLineData01_16;//
				G_un16ResponseMLength=35;
				G_uc8ResponseMessage[34]=CheckSum();
				break;
			
 			case 0x02://
 				G_uc8ResponseMessage[0]=0x93; 
 				//只读unsigned int 型数据
				G_uc8ResponseMessage[5]=(unsigned char)(KLineData02_1>>8);//
				G_uc8ResponseMessage[6]=(unsigned char)(KLineData02_1&0x00ff);
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData02_2>>8);//
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData02_2&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData02_3>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData02_3&0x00ff);
				G_uc8ResponseMessage[11]=(unsigned char)(KLineData02_4>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(KLineData02_4&0x00ff);//
				G_uc8ResponseMessage[13]=(unsigned char)(KLineData02_5>>8);//
				G_uc8ResponseMessage[14]=(unsigned char)(KLineData02_5&0x00ff);//
				G_uc8ResponseMessage[15]=(unsigned char)(KLineData02_6>>8);//
				G_uc8ResponseMessage[16]=(unsigned char)(KLineData02_6&0x00ff);
				G_uc8ResponseMessage[17]=KLineData02_7;//
				G_uc8ResponseMessage[18]=(unsigned char)(KLineData02_8>>24);//
				G_uc8ResponseMessage[19]=(unsigned char)(KLineData02_8>>16&0xff);
				G_uc8ResponseMessage[20]=(unsigned char)(KLineData02_8>>8&0xff);
				G_uc8ResponseMessage[21]=(unsigned char)(KLineData02_8&0xff);
				G_un16ResponseMLength=23;
				G_uc8ResponseMessage[22]=CheckSum();
 				break;
 			case 0x03://
 				G_uc8ResponseMessage[0]=0x92; 
 				//只读unsigned int 型数据
				G_uc8ResponseMessage[5]=(unsigned char)(KLineData03_1>>8);//
				G_uc8ResponseMessage[6]=(unsigned char)(KLineData03_1&0x00ff);
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData03_2>>8);//
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData03_2&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData03_3>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData03_3&0x00ff);
				G_uc8ResponseMessage[11]=(unsigned char)(KLineData03_4>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(KLineData03_4&0x00ff);//
				G_uc8ResponseMessage[13]=(unsigned char)(KLineData03_5>>8);//
				G_uc8ResponseMessage[14]=(unsigned char)(KLineData03_5&0x00ff);//
				G_uc8ResponseMessage[15]=(unsigned char)(KLineData03_6>>8);//
				G_uc8ResponseMessage[16]=(unsigned char)(KLineData03_6&0x00ff);
				G_uc8ResponseMessage[17]=(unsigned char)(KLineData03_7>>8);//
				G_uc8ResponseMessage[18]=(unsigned char)(KLineData03_7&0x00ff);
				G_uc8ResponseMessage[19]=(unsigned char)(KLineData03_8>>8);//
				G_uc8ResponseMessage[20]=(unsigned char)(KLineData03_8&0x00ff);
				G_un16ResponseMLength=22;
				G_uc8ResponseMessage[21]=CheckSum();
 				break;
 			case 0x04://
 				G_uc8ResponseMessage[0]=0x92; 
 				//只读unsigned int 型数据
				G_uc8ResponseMessage[5]=(unsigned char)(KLineData04_1>>8);//
				G_uc8ResponseMessage[6]=(unsigned char)(KLineData04_1&0x00ff);
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData04_2>>8);//
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData04_2&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData04_3>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData04_3&0x00ff);
				G_uc8ResponseMessage[11]=(unsigned char)(KLineData04_4>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(KLineData04_4&0x00ff);//
				G_uc8ResponseMessage[13]=(unsigned char)(KLineData04_5>>8);//
				G_uc8ResponseMessage[14]=(unsigned char)(KLineData04_5&0x00ff);//
				G_uc8ResponseMessage[15]=(unsigned char)(KLineData04_6>>8);//
				G_uc8ResponseMessage[16]=(unsigned char)(KLineData04_6&0x00ff);
				G_uc8ResponseMessage[17]=(unsigned char)(KLineData04_7>>8);//
				G_uc8ResponseMessage[18]=(unsigned char)(KLineData04_7&0x00ff);
				G_uc8ResponseMessage[19]=(unsigned char)(KLineData04_8>>8);//
				G_uc8ResponseMessage[20]=(unsigned char)(KLineData04_8&0x00ff);

				G_un16ResponseMLength=22;
				G_uc8ResponseMessage[21]=CheckSum();
 				break;
 			case 0x05://
 				G_uc8ResponseMessage[0]=0x92; 
 				//只读unsigned int 型数据
				G_uc8ResponseMessage[5]=(unsigned char)(KLineData05_1>>8);//
				G_uc8ResponseMessage[6]=(unsigned char)(KLineData05_1&0x00ff);
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData05_2>>8);//
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData05_2&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData05_3>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData05_3&0x00ff);
				G_uc8ResponseMessage[11]=(unsigned char)(KLineData05_4>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(KLineData05_4&0x00ff);//
				G_uc8ResponseMessage[13]=(unsigned char)(KLineData05_5>>8);//
				G_uc8ResponseMessage[14]=(unsigned char)(KLineData05_5&0x00ff);//
				G_uc8ResponseMessage[15]=(unsigned char)(KLineData05_6>>8);//
				G_uc8ResponseMessage[16]=(unsigned char)(KLineData05_6&0x00ff);
				G_uc8ResponseMessage[17]=(unsigned char)(KLineData05_7>>8);//
				G_uc8ResponseMessage[18]=(unsigned char)(KLineData05_7&0x00ff);
				G_uc8ResponseMessage[19]=(unsigned char)(KLineData05_8>>8);//
				G_uc8ResponseMessage[20]=(unsigned char)(KLineData05_8&0x00ff);
				G_un16ResponseMLength=22;
				G_uc8ResponseMessage[21]=CheckSum();
 				break;
 			case 0x06://
 				G_uc8ResponseMessage[0]=0x92; 
 				//只读unsigned int 型数据
				G_uc8ResponseMessage[5]=(unsigned char)(KLineData06_1>>8);//
				G_uc8ResponseMessage[6]=(unsigned char)(KLineData06_1&0x00ff);
				G_uc8ResponseMessage[7]=(unsigned char)(KLineData06_2>>8);//
				G_uc8ResponseMessage[8]=(unsigned char)(KLineData06_2&0x00ff);
				G_uc8ResponseMessage[9]=(unsigned char)(KLineData06_3>>8);//
				G_uc8ResponseMessage[10]=(unsigned char)(KLineData06_3&0x00ff);
				G_uc8ResponseMessage[11]=(unsigned char)(KLineData06_4>>8);//
				G_uc8ResponseMessage[12]=(unsigned char)(KLineData06_4&0x00ff);//

⌨️ 快捷键说明

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