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

📄 parameter.c

📁 电力行业必备。有错的地方
💻 C
📖 第 1 页 / 共 3 页
字号:
	*attr   = 0;
	
	if (port>8)													// 如果端口号大于8,返回0
	return(0);
	j = 0;
	for (i=0;i<sizeof(PARAM_TAB);i=i+6)
	{//*
		data[0] = *(PARAM_TAB+j);	//
		data[1] = *(PARAM_TAB+j+1);	//
		data[2] = *(PARAM_TAB+j+2);	//
		if (j>6)
		{
			if ((*(PARAM_TAB+(j-6)+2)&0x0F) != 0x0F)			// 如果前一项不是F项
			{
				*offset += *(PARAM_TAB + (j-6) + 3);			// 取前一项的长度相加
			}
			else												// 如果前一项是F项
			{
				if (*(PARAM_TAB+(j-6)+1) == 0x81)				// 如果是81xF				
				{
					*offset += *(PARAM_TAB + (j-6) + 3);		// 取前一项的长度相加
				}
				else
				{
					;											// 如果是其他F项,跳过
				}
			}
		}
		else
		{
			*offset = 0x00;										// 前两项的偏移地址为0
		}
		
		if ((port==*(PARAM_TAB+j)) &&							// 查找相同端口
			(*param==*(PARAM_TAB+j+1)) &&						// 查找相同标识码
			(*(param+1)==*(PARAM_TAB+j+2)))
		{
			len = *(PARAM_TAB+j+3);
			*attr = *(PARAM_TAB+j+4);
			*bnum = *(PARAM_TAB+j+5);
			return(len);	
		}
		else													
		{
			j += 6;
			continue;
		}
		
	}//*
	return(0);
}
/*********************************************************************************************************
** 函数名称: ReadData()
** 功能描述: 读参数区数据
**
** 输 入: 	len		数据长度
**			start	偏移地址
**			*buf	保存数据指针
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ReadData(uint32 start, uint32 len, uint8 *buf)
{
	uint32	i;
	uint8	*pt,*ptr;
	pt = buf + len;
	ptr= &ParamInSram.Term_Par.X8010[0];
	for (i=0;i<len;i++)
	{
		*pt = *(ptr + start + i);					// 反序读出
		pt --;
	}
}

/*********************************************************************************************************
** 函数名称: WriteData()
** 功能描述: 写参数区数据
**
** 输 入: 	len		数据长度
**			*addr	写数据的地址
**			*buf	数据指针
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void writeData(uint8 *addr, uint32 len, uint8 *buf)
{
	uint32	i;
	uint8	*pt;
	pt = buf + len - 1;
	for (i=0;i<len;i++)
	{
		*(addr + i) = *pt;						// 正序放入
		pt --;
	}
}
/*********************************************************************************************************
** 函数名称: WriteData1()
** 功能描述: 写任务参数区数据
**
** 输 入: 	len		数据长度
**			*addr	写数据的地址
**			*buf	数据指针
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void writeData1(uint8 *addr, uint32 len, uint8 *buf)
{
	uint32	i;
	uint8	*pt;
	pt = buf;
	for (i=0;i<len;i++)
	{
		*(addr + i) = *pt;						// 正序放入
		pt ++;
	}
}
/*********************************************************************************************************
** 函数名称: writeparamchk()
** 功能描述: 处理块校验码
**
** 输 入: 	*add	参数数据结构首地址
**			*bnum	块序号地址
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 2007-09-14
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void writeparamchk(uint8 *addr, uint8 *bnum)
{
	uint32	i;
	uint32	data;
	uint32	len;
	uint32	offset;
	uint8	*p;
	uint8  	chkdata[2];
	uint8	*pt;
	uint8	num;
	uint8	parval;
	
	offset = 0;
	data   = 0;
	//num = bnum;
	pt = bnum;
	num	= *pt;
	if (num>0)													// 计算偏移地址
	{
		for (i=0;i<num;i++)	
		{
			offset = offset + BLOCK_TAB[i];
		}
	}
	else
	{
		offset = 0x00;
	}
	len = BLOCK_TAB[num] - 2;
	for (i=0;i<len;i++)											// 计算校验和
	{
		parval = *(addr + offset + i);
		data = data + parval;
	}
	
	chkdata[0] = (uint8)(data>>8);
	chkdata[1] = (uint8)(data);
	p = addr + offset+ len;
	writeData(p, 2, chkdata);									// 保存校验和	
}
/*********************************************************************************************************
** 函数名称: paramback()
** 功能描述: 过日参数备份
**
** 输 入: 	
**			
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 2007-10-16
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void paramback(void)
{
	EraseWriteFlash(&ParamInSram.Term_Par.X8010[0], 
					PARAM_BACK_STAR, sizeof(ParamInSram));
}
/*********************************************************************************************************
** 函数名称: paramblockchk()
** 功能描述: 参数校验
**
** 输 入: 	
**			*blockstar 块起始地址
**			*pbuf	   保存出错的参数块序号
**			
** 输 出:  0:校验正确 1:校验错误
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 2007-10-16
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 paramblockchk(uint8 *blockstar, uint16 len)
{
	uint8	*p;
	uint16	i;
	uint16	addat;
	uint16	chk;
	
	p = blockstar;
	addat = 0;
	for (i=0;i<len-2;i++)
	{
		addat += *p;
		p ++;
	}
	chk = *p;
	chk = (chk<<8)&0xFF00;
	p ++;
	chk |= *p;
	if (addat==chk)
	{
		return(0);
	}
	else
	{
		return(1);
	}
}
/*********************************************************************************************************
** 函数名称: paramareachk()
** 功能描述: 参数校验
**
** 输 入: 	*parmstar 要校验的参数区起始地址执针
**			*pbuf	  保存出错的参数块序号
**			
** 输 出:  
**         
** 全局变量: 
** 调用模块: 
**
** 作 者: 
** 日 期: 2007-10-16
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void paramareachk(uint8 *parmstar, uint8 *pbuf)
{
	uint8	*pt;
	uint16	len;
	uint32	offset;
	static uint8 bnum;
	
	pt = pbuf;
	offset = 0;
	for (bnum=0;bnum<50;bnum++)
	{
		len = BLOCK_TAB[bnum];
		if (paramblockchk((parmstar+offset), len-2)!=0)
		{
			*pt = bnum;
		}
	}	
}

⌨️ 快捷键说明

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