ESP8266使用EEPROM的正确方式

这篇具有很好参考价值的文章主要介绍了ESP8266使用EEPROM的正确方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

EEPROM其实是一个EEPROMClass类的实例,其定义如下

#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_EEPROM)
extern EEPROMClass EEPROM;
#endif

从这里可以看出只要没有定义NO_GLOBAL_INSTANCES和NO_GLOBAL_EEPROM那么便会定义EEPROM。·

对于这个类的实现其实很简单,但是通过阅读代码,其实它总是被缓存的。也就是说你的读写总是在内存进行的。

它 的标准步骤如下:

EEPROM.begin  ->EEPROM.read或者EEPROM.write->EEPROM.end

中间的read和write其实都是操作的缓存内存,也就是说这个写并没保存下来,如果断电,那么信息会丢失。在end里能过判断标志位来确定是否需要commit,commit里才会写回数据到flash,另外它提供了getDataPtr和getConstDataPtr来直接操作那块缓存。它们的区别就是getConstDataPtr因为是const的所以默认你不会改写缓存,也就不会对数据设标志脏。getDataPtr正好相反,无论你获取后是否改写都会有数据脏标志,因为人家也不知道你会不会改写这段内存。所以正常读取时建意使用getConstDataPtr。

另外begin需要传入缓存大小,这里begin也就是你读写的大小,它先会缓存flash的数据到内存,接着你的所有操作都是针对它来。所以以在没有调用begin前的操作都是无效的。另外使用完后一定要调用end,否则缓存会一直占用内存。

另外这个类还提供了两个模板函数,

template<typename T> 
  T &get(int const address, T &t) {
    if (address < 0 || address + sizeof(T) > _size)
      return t;

    memcpy((uint8_t*) &t, _data + address, sizeof(T));
    return t;
  }

  template<typename T> 
  const T &put(int const address, const T &t) {
    if (address < 0 || address + sizeof(T) > _size)
      return t;
    if (memcmp(_data + address, (const uint8_t*)&t, sizeof(T)) != 0) {
      _dirty = true;
      memcpy(_data + address, (const uint8_t*)&t, sizeof(T));
    }

    return t;
  }

可以看到get和put可以更方便的操作EEPROM。文章来源地址https://www.toymoban.com/news/detail-532529.html

到了这里,关于ESP8266使用EEPROM的正确方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雕爷学编程】Arduino智能家居之使用ESP8266WiFi库和DHTesp库

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年01月18日
    浏览(51)
  • 使用ESP8266-01s连接阿里云并发送数据

    一.硬件选型 esp8266-01s一个以及相应固件烧录器一个(小白的话在这里推荐直接在安信可的淘宝官网买已经含有mqtt固件的模组,我之前买了一个不知道什么问题固件完全烧录不进去),烧录器用来直接将esp8266直接插到电脑的USB接口上进行串口通信。 二.阿里云平台配置 1.注册

    2023年04月20日
    浏览(39)
  • 【雕爷学编程】Arduino智能家居之使用ESP8266连接到OpenWeatherMap API获取天气数据

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月04日
    浏览(51)
  • 【雕爷学编程】Arduino智慧校园之使用ESP8266连接WiFi并上传温度数据到服务器

    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来

    2024年02月21日
    浏览(51)
  • 使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

            本篇博客记录一下以arduino IDE来开发一下ESP8266NodeMCU,实现用DHT11进行温湿度检测,并且上传新版的onenet官网;我在实现这个小项目的时候,发现网上资料有关onenet的资料都是旧版的,这就有点难受了,本着开源的精神,这篇博客就来弥补一下这方面资料的缺失。  

    2024年02月09日
    浏览(66)
  • Arduino离线安装esp32/esp8266

    使用本教程所示的安装方法,双击安装包的傻瓜式操作,不用进入文件夹修改,不用添加网站地址,免去网络带来的烦恼。安装完成后直接使用。 官网地址:Software | Arduino 打开链接后如图  点击红色框内以后跳转到此界面 再次选择红框后下载 打开安装包一直下一步就好 打

    2023年04月13日
    浏览(48)
  • Arduino + ESP8266 NodeMcu(超详细)

            从计算机学院入坑工学院,第一次学习Arduino+ESP8266 NodeMcu( CH340驱动版 )开发板的学习         本着小白上道,才发现各种开源项目和一些包在到处割韭菜,记录一下第一次学习安装遇到的坑 (本次记录所有下载链接和我上传在CSDN上的下载项目全部免费提供

    2023年04月08日
    浏览(53)
  • 获取 ESP32/ESP8266 MAC 地址并更改 (Arduino IDE)

    本指南介绍如何使用 Arduino IDE 获取 ESP32 或 ESP8266 开发板的 MAC 地址。我们还展示了如何更改开发板的 MAC 地址。 MAC 地址代表 媒体 访问 控制 地址,它是识别网络上每个设备的硬件唯一标识符。 MAC 地址由六组两位十六进制数字组成,以冒号分隔,例如: 32:AE:A7:04:6D:66 . MAC 地

    2024年02月12日
    浏览(219)
  • 【Arduino】ESP8266&WS2812S灯带控制

    前言   关于WS2812S灯带的驱动控制时序,网上已经有很多文章介绍过,这里就不在介绍了。这里只是为有WS2812S灯带的时候,能快速应用起来。直接举例代码案例,适合个人笔记用。 目录 下载文件 代码案例 下载文件   左上角点击 工具 ,在下拉的选项中,选 管理库 ,搜

    2024年02月13日
    浏览(43)
  • esp8266+小爱同学实现语音交互控制arduino

    可独立应用 也可搭载其他的MCU运行 在 Arduino IDE 中,打开“文件”“首选项”选项卡。 搭建NODE MCU环境:点击菜单栏文件,首选项,在“附加开发板管理器网址”框中,输入以下网址并单击“确定”按钮:(用于加载esp8266库)http://arduino.esp8266.com/stable/package_esp8266com_index.jso

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包