8266的EEPROM运行逻辑及操作-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3284|回复: 3

8266的EEPROM运行逻辑及操作

[复制链接]
发表于 2020-11-8 10:17 | 显示全部楼层 |阅读模式
虽然都知道8266的EEPROM的运用是很简单的事,简单到看了例程后几分钟就能用了。但是就是这么简单由于理解力的问题,以及因为简单 所有资料反而说得太笼统,容易引起使用者的误会,因此经过昨日出现的对EEPROM使用上的错误的研究,终于算是搞明白了EEPROM的运行逻辑了。发现很多人使用上的困惑究其原因还是因为对这个逻辑的不解造成的。
  EEPROM的原文这里就不多说了,有兴趣的到[这个链接](https://arduino-esp8266.readthedocs.io/en/latest/libraries.html#eeprom)上去看。这里只讲我的理解:
  1、8266的EEPROM是模拟的,每次要使用时是要调入FLASH里的。
  2、EEPROM只有一个,所有程序都可以用,在Blinker里,Blinker会用到两段,一段是0-1269,一段是136-2431。所以我们在开发时只能用4096以内的其它段。一般我们开发的时候只会存一些标识、WIFI的帐号和密码,总共也就用到96个字节,所以还算够用。
  3、和EEPROM密切相关的常用命令只有这么几个


  EEPROM.begin(size)
  EEPROM.write(addr,val)
  EEPROM.read(addr)
  EEPROM.end()  

4、内存块每次用`EEPROM.begin(size)`读入缓存里,读入的大小由size决定,该数值范围为(4-4096),每次读入的这个EEPROM块都是从ROM的0地址开始的。比如,你的size是1024字节,那么读入的EEROM的块地址是从0-1023这个块。所以如果就你自已用时,你爱读多少就读多少,每次都从0地址开始用。
5、如果同时有多个程序用这个内存块,那就要注意了。比如Blinker提示,占用了0-1269   和 1536-2431。这样,我们在使用时要避开。如下

EEPROM.begin(4000);
EEPROM.write(1280,val);
EEPROM.end();

这里的4000,指的是从0开始读到4000地址位的ROM进缓存。1280指从0开始到1280地址位写入,最后end()把缓存内容提交,真正写到物理介质中。


 楼主| 发表于 2020-12-9 12:44 | 显示全部楼层
按blinker官方的资料,2431以下都 不要用,都 被占用了
发表于 2021-4-8 22:38 | 显示全部楼层
原来这样终于解决了,谢谢。特别第4点的解读,一直理解错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:47 , Processed in 0.089260 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表