我STC89C52单片机C程序经常出问题怎么解决啊

无论什么芯片掉电保护的原理,就是将数据写入非易失性存储器

现在的芯片,一般集成的非易失性存储器是 NOR Flash它的特点是页擦后才能字节写或字写。

因此你的保存筞略要适当改变。假设你只保存一个变量占用 4 字节,你的 Flash 页长是 512 字节那么你需要 2 页来缓存它,才能保证任何情况下不会丢失所有(上┅次和当前)数据

开始时,你向第一页陆续写入开机读取则是逆向的,读到的第一个不为 FFFFFFFF  的单元就是你上次的数据你同时记下地址,下次就写入下一个单元地址当第一页写满时,你先写第二页的起始单元然后擦除第一页。这样无论哪一个瞬间掉电,你都不会失詓所有数据第二页写满的处理方法类似。

很显然你上电读的规则是,首先读第二页起始单元如果为空,从第一页最后单元逆向搜索;否则从第二页最后单元逆向搜索

更精致的防止写操作中途掉电的方案是,用 8 字节来表示你的变量4 字节变量加上 4 字节  完成标志。如果逆向搜索到最后非空单元不是全 0则再向前搜索。(其实如果你用 3 字节足以容纳变量的话,对于 51 系列以字节为单位写入的芯片后面加 1 芓节完成标志就够了。)

如果你要保存的变量不止 1 个你就将所有要保留的数据组成固定格式的串,以完成标志结尾你的串长最好是能被页长整除的。否则页尾空闲区不足串长时,就要从下一页开始写整个串也就是串不跨页。

}

我要回帖

更多关于 单片机C 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信