/*****************************************
定义菜单的默认值
*******************************************/
MP1 const P1Rom={
0, //地址
9600,
'A','S','5','0',//名字
1, //a
0, //b
1, //采集时间 1S,2S,3S,5S,10S,20S,30S,60S可选
//------------------------------------- crc
IDK, //ID
0, //crc 2009-2-20
};
MENUASC const MenuAsc[]={
Int, //设备的地址
Int, //波特率
//--------------------------------- 1#
CHAR4, //从机的名字
Float, //计算参数
Float, //计算参数
Int, //初始角度!
};
//******************************************************************************
//计算参数的地址
//******************************************************************************
unsigned char *GetAdr(unsigned char IndeX,unsigned char *Adr){
unsigned char i,k=0;
for(i=0;i
return (Adr+k);
}
/**********************************************************
校验字节
***********************************************************/
unsigned char GetJiaoData(unsigned char *pBuf,unsigned int Long){
unsigned char j;
j=0;
while (Long--) j += *pBuf++;
return j;
}
//************************************************************
//M=0是常用菜单;=1是备用菜单
//************************************************************
void WriteToEexx(unsigned int adr){
if(adr==rom_MP_ADR || adr==rom_MP_ADR_ghost){
Mp1.ID=IDK;
Mp1.crc=0;
Mp1.crc=GetJiaoData((unsigned char *)&Mp1,sizeof(Mp1));
WrFlash((unsigned int *)&Mp1,rom_MP_ADR,sizeof(Mp1)); //全部写入一次!
WrFlash((unsigned int *)&Mp1,rom_MP_ADR_ghost,sizeof(Mp1)); //全部写入一次!
}
}
//**********************************************************************************
//初始化菜单参数到2个地址的ROM中
void Init_MP1(unsigned int adr){
memcpy((unsigned char *)&Mp1,(unsigned char *)&P1Rom,sizeof(Mp1));
WriteToEexx(adr);
JB_Sn();
}
//**********************************************************************************
//返回=1 校验OK
//**********************************************************************************
//***********************************************************************************
//返回数据正确标志=0 ok;=1数据坏!
unsigned char Rd_MP_Dat(unsigned char *p,unsigned int adr){
MP1 *pr;
unsigned char sum;
RdFlash(p,adr,sizeof(MP1)); //全部读出来!
pr=(MP1 *)p;
sum=pr->crc;
pr->crc=0;
if(sum==GetJiaoData(p,sizeof(MP1)) && pr->ID ==IDK){//继续读菜单
pr->crc=sum;
sum=0;
}else{
sum=1;
}
return sum;
}
/***********************************************************************************
如果FIRST!=fIRST写入FLASHROM中
************************************************************************************/
void ReadMP(unsigned int adr){
if(adr==rom_MP_ADR){
if(Rd_MP_Dat((unsigned char *)&Mp1,adr)){
if(Rd_MP_Dat((unsigned char *)&Mp1,rom_MP_ADR_ghost)) Init_MP1(adr); //读取程序默认的参数表
}
}
}
//************************************************************************************/
void Jb_First(){
ReadMP(rom_MP_ADR);
}