- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在嵌入式环境中(使用 MSP430),我看到一些数据损坏是由于部分写入非 volatile 内存而导致的。这似乎是由于写入期间的功率损耗(写入 FRAM 或信息段)造成的。
我正在使用 CRC 验证存储在这些位置的数据。
我的问题是,防止这种“部分写入”损坏的正确方法是什么?目前,我已修改我的代码以写入两个单独的 FRAM 位置。因此,如果一个写入中断导致无效的 CRC,则另一个位置应保持有效。这是一种常见的做法吗?我是否需要为任何非 volatile 内存实现这种双重写入行为?
最佳答案
一个简单的解决方案是维护 两个 版本的数据(在闪存的不同页面中),当前版本和以前的版本。每个版本都有一个标题,其中包含一个序列号和一个验证序列号的单词 - 只是序列号的 1 的补码,例如:
---------
| seq |
---------
| ~seq |
---------
| |
| data |
| |
---------
关键是在写入数据的时候seq
和~seq
两个字都写last。
在启动时,您读取具有最高有效序列编号的数据(可能考虑回绕——尤其是对于短序列词)。当您写入数据时,您会覆盖并验证 最旧的 block 。
只要最后写入 CRC,您已经使用的解决方案就是有效的,但它缺乏简单性并且会产生不必要或不希望的 CRC 计算开销。
在 FRAM 上,您不必担心耐用性,但这是闪存和 EEPROM 的问题。在这种情况下,我使用回写式缓存方法,其中数据保存在 RAM 中,并且在修改时启动或重新启动计时器(如果它已经在运行) - 当计时器到期时,数据被写入 - 这可以防止突发写入避免破坏内存,甚至在 FRAM 上也很有用,因为它最大限度地减少了数据写入的软件开销。
关于memory - 断电时如何防止 "partial write"数据损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051614/
对于我正在构建的系统,我需要一个视频编解码器,它可以承受断电 - 即,如果断电,视频仍然需要从闪存盘上剩余的内容中播放。 (车载电脑项目,拔下 key 后电脑立即关闭,如果在事故中断电)。 谁能推荐合
是否可以创建一个逻辑应用来监视特定虚拟机并发送有关断电/通电或 CPU 使用率百分比的电子邮件通知? 我已经阅读了事件网格,但它似乎更适合资源创建/删除通知,而不是特定的虚拟机信号。 我也知道可以在虚
我是一名优秀的程序员,十分优秀!