大家好,第一次发帖希望能够得到支持。
最近做一个项目,是一个汽车空调控制器的项目,要求每次15点电(钥匙开关)断电可以保存断电前的状态,然后执行关机,再上电控制器还按掉电前的状态运行。其实控制器还有一路电源供电就是电瓶电源(30点电)。我在EEPROM里保存数据的策略是这样的,检测到15点电掉电,就开始保存数据,数据是分两块区域保存的,两块区域所保存的数据是一样的都是当前的状态,并且都有校验和。这里我说明一点,再掉15点电的时候如果30点电还有电的话我MCU使有足够的时间保存这些数据,数据不会出错是肯定的。但是如果15点和30点一起掉电的话,可能存在数据保存不全,一部分数据没来得及保存MCU就复位了。这时我的测试结果就让我产生疑惑了。我的想法是,就算我保存不了所有的数据,肯定是在某一个数据保存过程中MCU复位了,这个位置只可能是两块区域中的一个。当我再上电的时候我会先读第一块区域的数据,并检查校验和正确与否,如果没出错我就直接采用这组数据开机了。如果出错了,我认为是在第一块区域MCU复位的,我就取第二块区域的值,理论上第二块区域的值是没有背改动的,是一组有效的数据,当然不是这次断电前的数据,应该是上一次断电前的数据,我是可以不检验校验和的,但是我写程序的时候也把检验校验和写进去了,如果还是出错,我就恢复一组默认的数据,理论上这种情况是不会发生的。但是为什么就偏偏发生了呢?请教高人指点!也不知道说没说清楚。 |