关于掉电保存数据的思考

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

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

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

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

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

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

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

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

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

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值