原创 关于掉电保存数据的思考

2009-3-15 15:06 5251 5 7 分类: MCU/ 嵌入式

我是搞仪表的,基本工作简单说就是弄个人机界面把一些参数存储到flash。程序就是根据这些参数运行,实现一个个软件功能。有些软件模块需要记忆一些变量,目的是再次上电后能继续运行。为了实现这个功能我们基本上有两条路可以走。一是用电池给ram供电,掉电不丢;二是掉电进掉电中断,把你要保存的数据保存下来。


我们以前都是走第一条路的,走的还不错。主要的问题就是不同的时间点掉电,数据可能没有完全修改完,这样的数据是没有意义的,需要恢复到正确值。办法就是弄AB两份,通过校验,取正确的一份。麻烦是麻烦,但是总是能弄好。


最近出于对成本的考虑,领导想走第二条路。前几年公司里有人这样走过,但是没走通,原因是时间不够。以前用51的芯片,现在换成STM32的了,鸟枪换炮,再试试。


领导让再试试我们做马仔的只能硬着头皮去试试。


我首先考虑的是怎么存的问题。肯定不能像第一条路那样搞n多标志位,以前咱不懂,但是年纪小精力足,愣是把这么乱的逻辑弄清楚了。现在知道痛了肯定不能这么搞。原则一:逻辑要尽量简单。


以前为了支持在任何地方掉电不错,所以逻辑做的复杂了。那么现在能不能不让他在任何地方掉电,让他在我指定的几个地方掉电呢?当然可以。基本思路出来了:中断里置标志位,在主循环里去查找。一旦发现就存储,存好就死在那里等掉电。


试验结果:没戏!50%成功率都危险。原因是有些软件模块耗时挺长的,等轮到检测代码时已经掉电掉的差不多了。看着各个模块里被插满掉电检查函数的时候,我知道这条路也不行。


存看来只能在中断里存了。有些和flash无关的模块当然没有问题,有些模块本身是要操作flash的。这个难不倒我,做个互斥,和flash相关的模块在处理完后赶紧去查询掉电中断,如果已置起就赶紧保存数据。


这么一搞成功率一下子升到95%。没戏,我要的是200%。王八盖子的,不能倒在胜利的大门前。开始肯定怀疑是最坏情况下时间不够(正在处理flash时掉电),通过示波器观察时间足够。那是怎么回事?


思考了半天,难道我在开机时就进了掉电中断?试验了一下还真有这样的情况。那就简单了,延时一下,等电压稳定后再开中断。初步掉电了200次都正确。周末在做掉电测试。欲知结果,听下回分解吧


 


 


 


 


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户380277 2011-10-11 12:02

这个你需要通过FLASH模拟EEPROM。

用户290450 2011-5-9 22:22

博主,我也正在做这方面,不知你测试过这个断电数据保护最多能保护多少字节,还有就是怎样存储到闪存中,讨教了!
相关推荐阅读
用户194818 2009-04-26 10:48
关于功率、散热和sleep模式
我是做仪表,做软件的。220V供电,所以重来没考虑功耗的问题。功耗,散热是硬件和结构的同志们考虑的。我老婆原来是做手机的,她考虑最多的是功耗,关这个器件,关那个器件,唤醒这个,唤醒那个,待机电流只有几...
用户194818 2009-03-31 15:49
用Ulink2烧写Hex文件
项目弄的差不多了,准备移交给工厂生产了。现在的问题来了。我不能把整个工程文件给工厂,一来是怕工厂的人乱弄,二来也担心代码外泄。所以无论如何都不能用工程来烧写。那用什么来烧写呢?STM32提供了用串口来...
用户194818 2009-02-28 11:47
关于STM32F进掉电中断的问题 续
关于掉电的问题我又有了进一步的认识因为Vdda我们要用来做模拟量输出的,所以不能直接接Vcc,上次为了验证所以直接拉到Vcc。我们换了一个3.3V的温压器件后还是不能进PVD。见鬼了,上示波器!!一看...
用户194818 2009-02-28 11:27
关于LM3S5632,USB进suspend中断的问题
最近项目准备输出了,很多软件功能上的细节需要处理。不知道大家有没有这样的感觉,当你把一个又一个问题解决的时候,当你大致感觉到功能基本都实现的时候,突然发现很多细节上的问题,例如排版,按键操作等等这些之...
用户194818 2009-02-08 21:56
关于wfm文件
今天为了写个文档,想从示波器上复制个图片下来。以前包括毕业设计都是手描的,今天脑子短路准备事实就是一把。不太会,一路默认总算导出一张。一看后缀是wfm格式的。往画图板、word里拖都不认,向做文档的弟...
我要评论
2
5
关闭 站长推荐上一条 /3 下一条