3-11、12 arduino内存及EEPROM(智能应用篇)

3-11 arduino内存-1

在这里插入图片描述

Arduino最核心的就是ATmega328微控制器

1,上传程序到此微控制器
2,微控制器内部有存储单元

学习微控制器的存储单元的结构及基本工作原理,一方面以后编写程序在开发版上运行更高效稳定,另一方面使用arduino实现以前没实现的新的功能

微控制器里面存储单元由几种不同介质组成的

FLASH闪存

价格低读写慢
在这里插入图片描述

U盘就是这种存储介质(flash闪存)

SRAM静态随机存储器

除了flash,微控制器存储单元还有一种介质SRAM

价格高,读写快,对于一些时间,运行速度要求高的功能,这里是必须的

Flash和SRAM对比

在这里插入图片描述

静态信息:arduino运行过程中不发生改变的信息
动态信息:arduino运行过程中经常改变的信息

Arduino程序就是静态信息,当将arduino程序编写好并上传给arduino后,arduino只会一条一条的执行程序,不会对程序做任何修改,对arduino来说,程序就是静态信息

Arduino运行过程中,程序变量是经常发生变化的,程序变量就是动态信息,就是有SRAM处理的

Flash闪存用于存储静态信息,SRAM静态随机存储器用于存储动态信息

在这里插入图片描述

注意在断电后,存储内容是不一样的,flash存储的arduino程序静态信息不会因断电而消失,SRAM会因为没电而丢失其中的arduino程序变量的动态信息内容

注意:有时开发一些小项目,我们希望断电后一些变量能被arduino记住,希望程序变量被留住而不被清空

如智能灯,用户设置自己的喜欢颜色,当我们将电源关闭了,下次打开又会回到初始颜色,这样太麻烦,还得重新设置喜欢的颜色。

在这里插入图片描述

那么如何在断电后能记住我们之前设置好的颜色变量,
此时就要用到微控制器中的新的存储介质EEPROM

EEPROM(电可擦除可编程只读存储器)

在这里插入图片描述

存储器:存储信息的器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

只读存储器
在这里插入图片描述

我们可以通过向其施加电流的方式将存储器固化到其中去,但这种存储器的特点只能写一次,若程序写错了,此存储器只能报废了

可编程只读存储器只能写一次不实用,于是就出现了可擦写可编程只读存储器
在这里插入图片描述

可以将其内容擦写掉(使用紫外线擦写的,在芯片上方有个圆形孔洞,使用紫外线照射就能擦掉程序,避免信息丢失使用黑色挡光的胶挡住)

还是有些麻烦,就有了电可擦写可编程只读存储器

能否使用EEPROM代替SRAM?
不能,关键原因是EEPROM读写速度太低,比不上SRAM

总结

在这里插入图片描述

微控制器中的三种存储介质介绍完毕

在这里插入图片描述

Flash:存储arduino程序的
SRAM:存储程序变量的
EEPROM:存储需要断电还要保持的程序变量的

下节课讲如何用arduino读和写EEPROM,以及利用flash闪存存储程序内容中不需要更改的静态信息从而达到arduino工作中内存更加优化的方式工作

3-12 arduino内存-2 EEPROM

在这里插入图片描述

微控制器中有三种存储介质,各有不同功能

在这里插入图片描述

Flash及SRAM在arduino运行中发挥的功能远远不止这些,展开设计的知识比较复杂了

此时

EEPROM存储结构

在这里插入图片描述

如何向EEPROM写数据及读取数据

结构类似信报箱,每个格子有编号,编号就是地址
在这里插入图片描述
在这里插入图片描述

每个地址可以存储一个字节的信息
在这里插入图片描述

在arduino的EEPROM有1024个字节即1KB的大小

注意第一个地址的值是0,最后一个地址值是1023
在这里插入图片描述

每个字节是8位,能存放的十进制大小是0~255之间
在这里插入图片描述

Arduino的EEPROM能存放1024个0~255十进制数字
在这里插入图片描述

若一个数值超过0~255范围,如整数9999,小数1.23是如何存放在EEPROM中的?
在这里插入图片描述

示例程序(向EEPROM写入数据)

在这里插入图片描述

可以通过arduino的示例程序进行

也可以使用太极创客网站程序,已经翻译好了

/*
* EEPROM Write 示例程序
* 
* 储存于EEPROM的数值即使在断开Arduino开发板电源后仍会保存
* 在EEPROM中。当我们将新程序上传Arduino开发板后,这些储存
* 于EEPROM中的数值仍然可以被新的程序调用或者修改。
* 
* 本实例程序注释中文翻译:太极创客(WWW.TAICHI-MAKER.COM )
* 如需要获得EEPROM的使用中文说明以及Arduino开发板开发的更多资料和
* 视频教程,请参见太极创客网站:
* 
* 2017-11-22
* 
*/
#include <EEPROM.h>
/** 被写入数据的EEPROM地址编号 (即.即哪一个存储地址将要被写入数据) **/
int addr = 0;
void setup() {
  /** setup内无内容 **/
}
void loop() {
  /***
    如使用EEPROM存储模拟输入引脚所读取到的数值(即使用analogRead函数
    读取Arduino开发板的模拟输入引脚并且将读取到的数值存储于EEPROM),
    则需要将该数值除以4。原因是用analogRead函数所读取到的数值为0-1023
    而EEPROM只能储存0-255的数值。(EEPROM每一个存储地址可以储存一个字节,
    因此只能存储0-255的数值。)
  ***/
  int val = 123;  // 将要存储于EEPROM的整数数值
  
  /***
    将数值写入相应EEPROM地址。该数值即使在断开
    Arduino开发板电源后,仍将保持在开发板的EEPROM中不变。
  ***/
  EEPROM.write(addr, val);
  /***
    转入下一存储地址。当存储地址序列号达到EEPROM的存储空间结尾,
    返回到EEPROM开始地址。
    
    不同型号Arduino开发板具有不同大小的EEPROM存储空间,即:
    - Arduno Duemilanove: 512b EEPROM 存储空间.
    - Arduino Uno:        1kb EEPROM 存储空间 (允许使用的EEPROM地址序列号为 0-1023 ).
    - Arduino Mega:       4kb EEPROM 存储空间.
  ***/
  addr = addr + 1;
  if (addr == EEPROM.length()) {
    addr = 0;
  }
  delay(10);
}
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾名招财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值