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

📄 exec_func.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 4 页
字号:
uint8	Exec_ADAlarm_Comm(uint16	*	AD_CouSec,uint32	*	ADC_Val)
{
	 			
	uint32	ADC_Data=0;
	INT8U	*	temp;
	
	temp=Lmt_V_Time;
	
	if(temp[0]==0xff&&temp[1]==0xff)	return	FALSE;
	if(temp[0]==0 || temp[1]==0)	return	FALSE;
	
	(*AD_CouSec)++;
	
   	ADC_Data_read(0,&ADC_Data);
	(*ADC_Val)+=ADC_Data;
	
	if(*AD_CouSec>=temp[1])
	{
		
		uint32	cur_V_value=0;	//单位0.1V
		
		cur_V_value=((*ADC_Val/temp[1])*11*10)/1000+7;	//+7补偿误差
		
		{
 			char str[40];
 			sprintf(str, "PowerIn: %10.2f V \r\n", ((fp32)cur_V_value)/10);
 			uartWrite(UART3,(uint8	*)str,strlen(str),NULL);	//测试
		}
		
		*AD_CouSec=0;
		*ADC_Val=0;
		
		if((temp[0]) > cur_V_value)	//判断电压是否低于低电压告警门限值
		{
			
			if(ALARM_ID_STATUS[ALARMID_COUNT+GetAlarmID_Index(0x04)]==0)	//防止重复告警
				return	TRUE;
		}
		else
		{
			ALARM_ID_STATUS[ALARMID_COUNT+GetAlarmID_Index(0x04)]=0;	//低压告警已不存在
		}
	
		
	}
	
	return	FALSE;
	
}




uint8	GetCSQVal(void)
{
	char *	strAT="\r\nAT+CSQ\r\n";
	
	uartWrite(UART2,(uint8	*)strAT,strlen(strAT),NULL);
	OSTimeDlyHMSM(0,0,0,300);
	
	strAT="\r\nAT+CREG?\r\n";
	uartWrite(UART2,(uint8	*)strAT,strlen(strAT),NULL);
	OSTimeDlyHMSM(0,0,0,300);
	
	strAT="\r\nAT+CGREG?\r\n";
	uartWrite(UART2,(uint8	*)strAT,strlen(strAT),NULL);
	OSTimeDlyHMSM(0,0,0,300);
	
	return	TRUE;
}

uint8	GetTermID(void)
{
	char *	strAT[]={"\r\nATZ\r\n","\r\nATE0\r\n","\r\nAT+CMGD=1,4\r\n",//"\r\nAT+IPR=115200\r\n",
									"\r\nAT+CMGF=1\r\n\0", 	
									"\r\nAT+CNMI=1,1,0,0,1\r\n\0", 							
			          	          "\r\nAT+CLIP=1\r\n\0",
			          	          "\r\nAT+CSQ\r\n",
			          	         "\r\nAT+CGSN\r\n"};
	char 	strBuff[TRANSINFOLEN];
	char 	buff[15];
	uint16	len=0;
	memset(strBuff,0,sizeof(strBuff));
	LoadUart2(UART2,(uint8	*)strBuff,&len); 
	memset(strBuff,0,sizeof(strBuff));
	uartWrite(UART2,(uint8	*)strAT[0],strlen(strAT[0]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[1],strlen(strAT[1]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[2],strlen(strAT[2]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[3],strlen(strAT[3]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[4],strlen(strAT[4]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[5],strlen(strAT[5]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	uartWrite(UART2,(uint8	*)strAT[6],strlen(strAT[6]),NULL); 
	OSTimeDlyHMSM(0,0,0,600);
	LoadUart2(UART2,(uint8	*)strBuff,&len); 
	memset(strBuff,0,sizeof(strBuff));
	uartWrite(UART2,(uint8	*)strAT[7],strlen(strAT[7]),NULL); 
	OSTimeDlyHMSM(0,0,0,300);
	LoadUart2(UART2,(uint8	*)strBuff,&len); 
	if(strstr(strBuff,"OK")!=NULL)
	{
		
		fp64	ff=0;
		uint8	i=0,j=0;
		
		for(i=0,j=0;i<sizeof(strBuff);i++)
		{
			if(strBuff[i]>=0x30&&strBuff[i]<=0x39)
			{
				buff[j++]=strBuff[i];
				if(j>=15)	break;
			}
		}
		
		memcpy(StrTermID,buff,sizeof(buff));
		
		
		for(i=0;i<15;i++)
		{
			ff+=(buff[i]-0x30)*pow(10,15-i-1);
		}

#if defined(SYSTEM_SEMCONTROL)
		{
			INT8U SysRsrcErr;
			OSSemPend(gw_pSysRsrcSem, 0, &SysRsrcErr);
		}
#else
		OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
		//memset(TERM_ID,0,sizeof(TERM_ID));
		TERM_ID[0]=(uint8)(ff/(0x1000000000000LL));
		TERM_ID[1]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL)/(0x10000000000LL));
		TERM_ID[2]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL)/(0x100000000LL));
		TERM_ID[3]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL)/(0x1000000LL));
		TERM_ID[4]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL)/(0x10000LL));
		TERM_ID[5]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL-TERM_ID[4]*0x10000LL)/(0x100LL));
		TERM_ID[6]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL-TERM_ID[4]*0x10000LL-TERM_ID[5]*0x100LL)/(0x1LL));
#if defined(UART_SEMCONTROL)
		OSSemPost(gw_pSysRsrcSem);
#else
		OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
		return	TRUE;
		
	}
	
	return	FALSE;
}

uint32	Get_ALARM(void)
{
	uint32	pin=0;	
	
	pin=Read_P1()&(1<<27);
	if(pin>0)
	{
		
		return	0;	//无求助告警
	}
	else
	{	
		uint8 paramValue=2;
		uint8 paramValue_alm=0;
		
		GetCustomValue(0x000c,&paramValue_alm);
		if(paramValue_alm!=2)
			SaveCustomValue(0x000c,&paramValue);//将求助告警保存。
		
		return	1;	//有求助告警
	}
	
	
}


uint32	Get_ACCIN(void)
{
	uint32	pin=0;	
	
	pin=Read_P2()&(1<<1);
	if(pin>0)
		return	0;	//ACC关
	else
		return	1;	//ACC开

}


uint8	RemoteCtrl(uint8	remoteCtrl)
{
	uint8 	paramValue=0;
	uint8	paramValue_r=0;
	if(remoteCtrl==0x01)	//远程控制(1)执行
	{
		OS_ENTER_CRITICAL();
		P2_GPIOClr((1 << 0));	//输出低电平
		OS_EXIT_CRITICAL();
		RemoteCtrl_Status=1;
		paramValue=2;
		GetCustomValue(0x000d,&paramValue_r);
		if(paramValue_r!=2)
			SaveCustomValue(0x000d,&paramValue);//将远程控制保存。
					
	}
	else	if(remoteCtrl==0x03)	//远程控制(1)解除
	{
		OS_ENTER_CRITICAL();
		P2_GPIOSet((1 << 0));	//输出高电平
		OS_EXIT_CRITICAL();
		RemoteCtrl_Status=0;
		paramValue=1;
		GetCustomValue(0x000d,&paramValue_r);
		if(paramValue_r!=1)
			SaveCustomValue(0x000d,&paramValue);//将远程控制解除保存。
	}
	else
		return	FALSE;
	
	return	TRUE;
	
}




uint8	SaveMileage(uint32	*	Addr,uint8	*	buff)		//保存统计里程数
{
	
	uint16	i=0,k=0;
	uint32	cur_milVal=0;
	uint32	addr=*Addr;
	const	SaveSize=50;	//5次循环存储
	const	buff_Size=10;	//10
	uint8	buff_Save[buff_Size];	//
	
	memset(buff_Save,0,buff_Size);
	for(k=0;k<SaveSize/buff_Size;k++)
	{
		W25X32_READ_Semphore(addr,buff_Size,buff_Save);
		OSTimeDly(3);
		cur_milVal=0;
		for(i=0;i<sizeof(cur_milVal);i++)
			cur_milVal+=((uint32)buff_Save[i])<<(8*(sizeof(cur_milVal)-i-1));
		if(cur_milVal<0xffffffff)
		{
			
			addr+=buff_Size;
			if(addr==(MILEAGE_ACC_SEC*SEC_SIZE+SaveSize))
			{
				addr=MILEAGE_ACC_SEC*SEC_SIZE;
				W25X32_Erase_Semphore(MILEAGE_ACC_SEC, MILEAGE_ACC_SEC);
				W25X32_WR(addr,buff,buff_Size);	
				OSTimeDly(3);
			}
		}
		else
		{
			
			W25X32_WR(addr,buff,buff_Size);
			OSTimeDly(3);
			addr+=buff_Size;
			break;
		}
		
	}
	
	*Addr=addr;
	
	return	TRUE;	
	
}
uint8	GetLastACC_Mileage(uint32	*	Addr,uint8	*	buff)
{
	uint16	i=0,k=0;
	uint32	cur_milVal=0;
	uint32	addr=*Addr;
	const	SaveSize=50;	//5次循环存储
	const	buff_Size=10;
	uint8	buff_Save[buff_Size];	//
	
	memset(buff_Save,0,sizeof(buff_Save));
	
	for(k=0;k<SaveSize/buff_Size;k++)
	{
		W25X32_READ_Semphore(addr,buff_Size,buff_Save);
		OSTimeDly(3);
		cur_milVal=0;
		for(i=0;i<sizeof(cur_milVal);i++)
			cur_milVal+=((uint32)buff_Save[i])<<(8*(sizeof(cur_milVal)-i-1));
		if(cur_milVal<0xffffffff)
		{
			if(addr==MILEAGE_ACC_SEC*SEC_SIZE+SaveSize-buff_Size)
			{
				W25X32_READ_Semphore(addr,buff_Size,buff);
				OSTimeDly(3);
				break;
			}
			addr+=buff_Size;
		}
		else
		{
			if(addr==MILEAGE_ACC_SEC*SEC_SIZE)
			{
				//memset(buff,0,buff_Size);
				GetParamValue(0x0304,buff);	//从设置参数中得到里程数及ACC累计值的初始值。
				GetParamValue(0x0303,buff+5);
				W25X32_WR(addr,buff,buff_Size);	
				OSTimeDly(3);
			}
			else
			{
				addr-=buff_Size;
				W25X32_READ_Semphore(addr,buff_Size,buff);
				OSTimeDly(3);
				break;
			}
		}
		
	}
	
	*Addr=addr;
	
	return	TRUE;	
	
}
/*
uint8	SaveMileageACC(uint32	*	Addr)		//以后用作历史数据存储处理
{
			
	uint8	buff[128];
	uint16	i=0,j=0,k=0;
	uint32	cur_milVal=0;
	
	uint32	addr=*Addr;
	
	
	memset(buff,0,sizeof(buff));
	for(k=0;k<SEC_SIZE/sizeof(buff);k++)
	{
		
		W25X32_READ(addr,sizeof(buff),buff);
		cur_milVal=0;
		for(i=0;i<sizeof(cur_milVal);i++)
			cur_milVal+=((uint32)buff[i])<<(8*(sizeof(cur_milVal)-i-1));
		if(cur_milVal<0xffffffff)
			addr+=sizeof(buff);
		else
		{
			cur_milVal=(uint32)milValue;
			for(i=0;i<sizeof(cur_milVal);i++)
				buff[i]=cur_milVal>>(8*(sizeof(cur_milVal)-i-1));
			W25X32_WR(addr,buff,sizeof(cur_milVal));
			addr+=sizeof(buff);
			break;
		}
		
	}
	for(j=0;j<(MILEAGE_ACC_SEC_END-MILEAGE_ACC_SEC+1);j++)
	{
		if(addr==(MILEAGE_ACC_SEC+j)*SEC_SIZE)
		{
			INT16U	len=0,moveAddr=0;
			uint8	cur_Sec[2];
			if((MILEAGE_ACC_SEC+j)==MILEAGE_ACC_SEC_END)
			{	
				j=0;
				addr=(MILEAGE_ACC_SEC+j)*SEC_SIZE;
			}
			W25X32_Erase(MILEAGE_ACC_SEC+j, MILEAGE_ACC_SEC+j);
				

⌨️ 快捷键说明

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