完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
其实很简单哈,核心就四个函数,申请空间函数,写入函数,保存函数,读取函数,我这里用一个IO读取其状态来代表读取还是写入状态(不知道IO操作的看我之前的博文),然后写入的值移植在0-100之间变化,所以你在更换状态之后就可以看到写模式最后写入的值,而且你关机重启,他仍然处于读取状态,读取的值任然是之前的值。
#include int num = 0; void setup() { Serial.begin(115200); EEPROM.begin(4096); //申请空间,传入参数为size,为需要读写的数据字节最大地址+1,取值1~4096; Serial.println("ESP 32 内部存储测试"); pinMode(15, INPUT_PULLUP ); } void loop() { delay(500); if(digitalRead(15) == 0) { num++; if(num == 100) num = 0; Serial.print("ESP 32 写入模式,写入:"); Serial.println(num); //写数据,里面传入的参数为地址和写入的数据,8位,如果是很大的数可以分高低位存进去或者封装一些读取写入指定长度的函数,或者看后面的注意点里面有提到 EEPROM.write(20, num);delay(1); EEPROM.commit();delay(1); //在写好所有的更改之后,保存更改的数据 } else { Serial.print("ESP 32 读取模式,取出数据:"); Serial.println(EEPROM.read(20)); //读数据,里面填写的参数为地址,需要与上面的写入地址一样才可以正常读出上面我们写入的数据 } } 看看效果 说一些需要注意的地方 1.我们使用开辟的空间是从ESP32的FLASH中分配出来的 2.包含的那个头文件的库里面已经有一个EEPROM对象可以直接使用 3.默认的EEPROM对象大小为4096字节,用户操作地址为0~4095; 4.读取和写入有函数支持,但切忌写入的东西都写完后要用保存函数保存更改才会正式生效,保存函数为EEPROM.commit()或EEPROM.end() 5.空间的申请都是4字节的倍数,即使你申请23,系统内部也会给你改成24字节 6.ESP32的EEPROM只是从flash上申请一个扇区用,所以读写都只能按扇区(4096字节)来 7.这个东西存在的目的本就不是存什么大东西的哈,只是存一些关键的需要掉电存储的参数,所以建议大家不要改申请地址,一直用这个大小就好,如果大改小会导致一些原来的数据丢失哈 8.那么存一些字符串和很大的数怎么办呢?你可以封装一个专门用于存储读取字符串的函数,但是这个东西存字符串这种东西的应用不常见,那么存一些大的数怎么办呢,这个非常常见,因为我们是8位的,也就是0-255,如果太大或者是小数呢,我们可以分高低位存储,除以255和取余255分别为高低位,甚至分高中低三位都行,而小数呢,也很简单,比如我们可以放大1000倍取整然后高低位存进去,之后取出来还原,再除以1000,就可以得到0.001精度的小数保留,精度还可以再放大。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1657 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
1961 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
4911 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 11:29 , Processed in 0.526497 second(s), Total 70, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号