📄 param_save_restore.c
字号:
#include "global.h"
void restore_factory_param(void)
{
if(m_factory_flg==1){ //工厂参数恢复标志
orgdata_init();
m_factory_flg=0;
}
}
void restore_user_param(void) //恢复用户参数
{ uint data i;
uchar xdata *data p;
uchar xdata *data s;
uint xdata count=sizeof(L_Data)+sizeof(E_InputData)+sizeof(E_OutputData)+sizeof(TIMER);
if(m_restore_flg==1){ //用户参数恢复标志
if(m_save_over_flg==1){ //存储过标志
EA=0;
p=0xa000; //用户参数Flash首地址
s=0x1000; //用户参数Ram首地址
for(i=0;i<count;i++){ //恢复0x4ff大小的数据
*(s+i)=*(p+i);
}
m_restore_flg=0;
EA=1;
}
}
}
void save_user_param(void) //存用户参数到fs4中
{
uint xdata i;
uchar xdata *s=0x1000;
uint xdata count=sizeof(L_Data)+sizeof(E_InputData)+sizeof(E_OutputData)+sizeof(TIMER);
if(m_save_flg==1){ //用户参数存储标志
mE_InputData.mDianTi[0].TongXun.bZhiShi=1;
EA=0;
erase(0xa000);
for(i=0;i<count;i++)
writef((0xa000+i),*(s+i));
m_save_flg=0; //用户参数存储标志
m_save_over_flg=1; //用户参数存储过标志
SetUserParamSaveOverFlg();
EA=1;
}
}
uchar erase(uint addr) // 擦除 flash 程序区
{ uchar xdata *s; uchar b,c,d,e;
s=(0x555+addr); *s=0xaa;
s=(0xaaa+addr); *s=0x55;
s=(0x555+addr); *s=0x80;
s=(0x555+addr); *s=0xaa;
s=(0xaaa+addr); *s=0x55;
s=addr; *s=0x30;
d=0; e=0;
do{b=*s; c=b&0x20; b=b&0x80;
if(b==0x80) d=1;
if(c==0x20) e=1;
}while((d==0)&&(e==0));
if(e==1)
{b=*s; b=b&0x80;
if(b==0x80) d=1;
s=0x555+addr; *s=0xf0;
}
return(d);
}
uchar writef(uint x,uchar y)
{ uchar xdata *s; uchar xdata a,b,c,d,e;
uint addr=0;
if((x>=0x4000)&&(x<0x6000)) addr=0x4000;
if((x>=0x6000)&&(x<0x8000)) addr=0x6000;
if((x>=0x8000)&&(x<0xa000)) addr=0x8000;
if((x>=0xa000)&&(x<0xc000)) addr=0xa000;
if(x>=0xc000) addr=0xc000;
s=0x555+addr; *s=0xaa;
s=0xaaa+addr; *s=0x55;
s=0x555+addr; *s=0xa0;
s=x; *s=y;
d=e=0;
a=y;
do
{ b=*s; c=b&0x20;
if(b==a) d=1;
else if(c==0x20) e=1;
}
while((d==0)&&(e==0));
if(e==1)
{ b=*s;
if(b==a) d=1;
s=0x555+addr;
*s=0xf0;
}
if(d==1) return(d);
else
{s=0x555+addr; *s=0xaa;
s=0xaaa+addr; *s=0x55;
s=0x555+addr; *s=0xa0;
s=x; *s=y;
d=e=0;
a=y;
do
{ b=*s; c=b&0x20;
if(b==a) d=1;
else if(c==0x20) e=1;
}
while((d==0)&&(e==0));
if(e==1)
{ b=*s;
if(b==a) d=1;
s=0x555+addr;
*s=0xf0;
}
}
return(d);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -