1 2 3 4 5 6 7 8 | eeprom内数据格式 __eeprom int egi8v[4][3]= { 1,1,1, 2,2,2, 3,3,3, 4,4,4, }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | //Ram变量区 int r_egi8v[4];//eeprom缓存区 int rgi8v_EpmError;//自检程序运行状态 //eeprom变量区 __eeprom int egi8v[4][3]; //自检程序调用 …… rgi8v_EpmError=0; //状态初始化为“0” CheckRam(); …… void CheckRam() { //临时变量区 int iCheckNum;//记录对比结果 int iError; //记录错误状态 int iTemp; //循环变量 iError=m_NoError;//初始化无错误 for (iTemp=0;iTemp<4;iTemp++) { iCheckNum=0; if(egi8v[iTemp][0]==egi8v[iTemp][1]) { iCheckNum=0x01; } if(egi8v[iTemp][0]==egi8v[iTemp][2]) { iCheckNum|=0x02; } if(egi8v[iTemp][1]==egi8v[iTemp][2]) { iCheckNum|=0x04; } Delayms(10); //(1)(1)(1)(1)(1)(1)(1) switch (iCheckNum) { case 1: egi8v[iTemp][2]=egi8v[iTemp][0]; break; case 2: egi8v[iTemp][1]=egi8v[iTemp][0]; break; case 4: egi8v[iTemp][0]=egi8v[iTemp][1]; break; case 7: break; default: iError=m_EpmErrorS;//当三个eeprom数据完全不同时,报错。 break; } r_egi8v[iTemp]=egi8v[iTemp][0]; } Delayms(400); //(2)(2)(2)(2)(2)(2)(2) if (iError!=m_NoError) { //自检错误,数据复位 SubMenuBack(); } else { //程序正常,继续执行 } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | void SubMenuBack() { switch(rgi8v_EpmError) { case 0: //第一次进入,显示复位提示 ClrDisBuffer();//清屏 DisString(0,“数据错误”);//第0行显示 DisString(1,“复位”);//第1行显示 DisString(2,“确定吗?”);//第2行显示 DisBuffer2LCD(0,0); DisBuffer2LCD(1,0); DisBuffer2LCD(2,0); DisBuffer2LCD(3,0); break; case 1: //第二次进入,执行复位 DisString(2,“复位中……”);//显示“复位中……” DisBuffer2LCD(2,0); for (iTemp=0;iTemp<4;iTemp++) { SaveI8U(iTemp,cu8v[iTemp]);//cu8v[iTemp]是预置的初始化值 } CheckRam();//再次检测 break; default: //第三次进入,复位无效,锁死程序 rgi8v_EpmError=2; break; } rgi8v_EpmError++;//状态修改 } |
更多回帖