vb2002 发表于 2024-8-2 12:23:12

请教下这位老哥说的,可以减少eeprom的磨损.


这位老哥说的 储存个指针.然后让eeprom 逐步往后写,写到最后(STC8H1K08) 0FFFh 后,调回0000j 继续循环.
这个具体代码怎么操作,有人用过吗?可否提供下代码,指导下?


vb2002 发表于 2024-8-2 13:07:07

wnagming 发表于 2024-8-2 12:56
我用过,我是用EEPROM储存状态,char类型就够了,所以程序初始化中读取EEPROM,当读取到默认值0XFF时,取上 ...

代码可以发一份吗?
手电的开关次数有点多的
要节约用好eeprom

Lkck8210 发表于 2024-8-2 13:19:57

vb2002 发表于 2024-8-2 13:07
代码可以发一份吗?
手电的开关次数有点多的
要节约用好eeprom

关开关什么事?
EEProm不是有改变才写入吗?

DebugLab 发表于 2024-8-2 13:27:27

STC8H1K08,固定8K CODE,4K EEPROM,8个扇区,4096字节
可以第0扇区作为位计数器,bit有多少个0代表指针指向其他7个扇区的位置,共4096位
其他7个扇区共3584字节,最高位设为标志位,其他7位能保存128个状态
上电读取EEPROM第0扇区位域的指针,寻址到指定字节,读取最高位
如果最高位为0,说明数据有效,使用该字节低7位数据
如果最高位为1,说明该数据无效,读出来,数据+1切换下一个状态,EEPROM第0扇区位域的指针+1(按顺序再写个0进去),下一个状态的数据写入这个地址
500ms后,当前地址对应的数据最高位写为0

DebugLab 发表于 2024-8-2 13:29:08

DebugLab 发表于 2024-8-2 13:27
STC8H1K08,固定8K CODE,4K EEPROM,8个扇区,4096字节
可以第0扇区作为位计数器,bit有多少个0代表指针指 ...

如果指针==3584,指针=0,擦除所有扇区
寿命即可变为3.5亿次

DebugLab 发表于 2024-8-2 13:34:22

wnagming 发表于 2024-8-2 13:31
这样算下来,就是不做EEPROM磨损功能,也够咱们用了

这就是磨损均衡

vb2002 发表于 2024-8-2 13:46:02

Lkck8210 发表于 2024-8-2 13:19
关开关什么事?
EEProm不是有改变才写入吗?

要换挡啊,换挡就会有写入

vb2002 发表于 2024-8-2 13:48:04

DebugLab 发表于 2024-8-2 13:27
STC8H1K08,固定8K CODE,4K EEPROM,8个扇区,4096字节
可以第0扇区作为位计数器,bit有多少个0代表指针指 ...

这个牛,,{:5_284:}
能提供代码吗?

DebugLab 发表于 2024-8-2 14:35:40

vb2002 发表于 2024-8-2 13:48
这个牛,,
能提供代码吗?

没有,这段文字直接翻译成C语言就是代码了

Lkck8210 发表于 2024-8-2 15:16:36

vb2002 发表于 2024-8-2 13:46
要换挡啊,换挡就会有写入

但不会每次开机都换档吧?
有换档才在关机时更新EEProm
页: [1] 2 3 4
查看完整版本: 请教下这位老哥说的,可以减少eeprom的磨损.