采用7楼的方法,不论是FLASH还是EEPROM,都是非常有效的。软件设置“写使能”标记,虽然软件冗余,但可以排除绝大多数的错误写,包括程序跑非引起的异常写。
有一点我不完全同意7楼:如果程序有多出写操作的程序,不用子程序把写操作的程序精简,跑飞后错写的概率同样会增加。我写的子程序流程是:
“写使能标记”是否正确,错误则返回;
正常写操作;
取消“写使能标记”;
返回。
注意:
1、“写使能标记”尽量不要使用“1位”数据,可以使用字节来做标记,标记是一个特定的数据值,不要使用位排列有规律的数据,如0x00、0xFF、0x55、0xAA等。
2、尽量在程序中不同的地方(不要在中断中)增加“取消‘写使能标记’”的指令,这样可以保证跑飞后也很难有写操作的条件。
提醒一点:检查低压复位电路是否满足电池的特性和要求?电池多少V可以复位?MCU低到多少V还可以工作?