如果出发点是为了避免出现失电时写数据错误,做掉电检测并配置足够大的储能电容,能保证数据不会出错,代价是增加一个电容、占用一个I/O资源;如果数据很重要,可以再辅以数据校验等软件的方法,达到更谨慎的数据保护,代价是要增加代码量。如果只是为了恢复数据时能恢复正确的数据,倒可以不考虑失电检测,因为那时候你不一定需要更新Flash内的数据,只需要关心恢复时能找到正确的数据。两种方法各有优缺点。
加电容是为了维持MCU的工作,一旦检测到失电,立即保存好数据,然后进入休眠或空闲,等待电源恢复了再去尝试Flash的读写操作。这个需要根据你系统的功耗来确定需要多大的电容,实验来定。
用计算读写次数或者标志位的方法,从理论分析,都还是有可能造成错误的数据被恢复,因为你不知道什么时候掉电(增加掉电检测电路除外),有可能你在做标志的时候刚好单片机进入复位状态而没成功设标志。
|