📄 parameter.c
字号:
*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 + -