在本教程中,我们将学习计算机内存的基本知识,它的操作和类型。然后我们将专注于Arduino,了解Arduino上的不同类型的内存,如Flash, EEPROM, RAM,它们的大小和用途。
什么是计算机内存?
计算机的设计和开发是为了执行各种工程、数学、教育和娱乐任务,速度非常快,精度很高。所有这些复杂的任务都可以归结为三个基本操作:
- 在一些输入设备的帮助下接受数据。
- 分析和处理数据。
- 在一些输出设备的帮助下产生结果(数据)。
为了让处理器无缝地执行这些操作,它需要存储输入数据,保存中间结果,并将输出数据(结果)存储在某个位置。这叫做记忆。
计算机存储器是一种可以永久或暂时存储数据和指令的电子设备。无论大小和应用,例如,它可以是一个巨大的存储服务器或一个简单的基于微控制器的嵌入式系统,所有的计算机系统都需要内存。
内存表示法
我们知道Digital Electronics只处理两个数字1和0。这是用来表示信号的电压水平。例如,在5V的逻辑电平系统中,“1”代表5V,“0”代表0V。
所以,信号的状态可以是' 1 '或' 0 '在任何给定的时间。这就是所谓的比特,它是数字世界中最小的数据单位。把这8个位组合起来,我们得到一个字节,它可以是28= 256个不同的位模式。
下面列出两个常用的信息单位:
Bit:数据的最小单位。它通过两个可能值' 1 '或' 0 '中的一个表示逻辑状态。
字节:一组8位称为一个字节。一个字节的数据可以有从00000000到11111111之间的任何二进制值。
基本的内存操作
只有两个基本的,你可以执行一个内存。它们是读和写。典型的内存读操作需要一个地址作为输入,并返回该位置的数据。
对于典型的写操作,它需要一个必须存储数据的地址和实际数据本身。
类型的内存
计算机系统中所有不同的存储器都可以分为两种类型。它们是RAM和ROM。
RAM或随机存取存储器是用来存储临时数据的。在基于微处理器的系统中,操作系统、应用程序和其他数据被加载到RAM中,以便处理器能够快速访问这些数据。
在基于微控制器的系统中,RAM用于存储临时数据。
ROM或只读存储器是存储应用程序代码或固件的永久存储器。
挥发性和非易失性
内存的另一个重要分类是基于功率依赖性。像RAM这样的存储器只要有电源就会存储数据,一旦断电,里面的数据就会消失。这种类型的内存被称为易失性内存。
另一方面,像ROM这样的存储器被称为非易失性存储器,因为它们中的数据是独立于电源的,也就是说,即使断电,它们仍然保留数据。
Arduino上不同类型的记忆
现在我们已经了解了一些关于计算机内存和不同类型的内存,让我们继续了解Arduino上不同类型的内存。
就像任何计算机系统一样,Arduino也有两个基本的内存,即RAM和ROM。但有趣的是它们的组织方式和大小。
基本上,Arduino板上有三种类型的内存,比如UNO、Mega 2560或Nano。它们是:
- 闪光
- 内存
- eepm
Arduino中的RAM与其他RAM一样,用于存储临时数据,也是Volatile的。Flash和EEPROM是两种ROM内存类型,用于存储应用程序代码和小数据。它们在本质上是不挥发的。
让我们分别看看Arduino上这三种类型的内存,并比较它们在不同Arduino板上的大小。
注意:从技术上讲,所有这些存储器都是Arduino板(如UNO、Nano、Mega2560)上的微控制器(如ATmega328P或atmega2560)的一部分。
闪光
Flash Memory也被称为Flash ROM。在Arduino中,Flash存储要运行的应用程序代码。在我们编写了Arduino Sketch之后,比如Blinky,我们只需在Arduino IDE中点击Upload按钮来运行Blinky程序。
在后台,这将编译草图并生成一个二进制文件,并将二进制文件存储到Arduino的Flash中。复位后,Arduino将读取存储在闪存中的指令,并执行必要的操作。
下表比较了一些流行的Arduino板上的闪存容量。
Arduino电路板 |
单片机 | 闪存大小 |
Arduino UNO | ATmega328P | 32 KB |
Arduino纳米 |
ATmega328P | 32 KB |
Arduino超级2560 | 2560接口 | 256 KB |
Arduino微 |
ATmega32U4 | 32 KB |
Arduino达芬奇 | ATmega32U4 | 32 KB |
这个Flash Memory的一部分实际上是由Bootloader使用的,Bootloader负责通过串行接口将二进制文件存储到Flash中。
eepm
Arduino上的下一种内存是EEPROM。EEPROM是电可擦可编程只读存储器的简称。
实际上,上面提到的Flash Memory也是EEPROM的一种。主要的区别是EEPROM可以在字节级擦除,而Flash可以在块级擦除。
Arduino中的EEPROM通常用于存储少量的数据,如输入或输出设备的状态,因此即使Arduino断电,也可以保留这些数据。我做了一个专门的教程Arduino EEPROM(内部和外部)。
有关Arduino内部EEPROM的更多信息,请访问“Arduino EEPRPM教程”。如果你对I的接口感兴趣2基于C的外置EEPROM IC如AT24C256与Arduino,然后访问“Arduino AT24C256 EEPROM教程”。
回到Arduino上的EEPROM,它的大小通常很小,只有几个字节。下表显示了不同Arduino板上EEPROM的大小。
Arduino电路板 |
单片机 | eepm大小 |
Arduino UNO | ATmega328P | 1 KB |
Arduino纳米 |
ATmega328P | 1 KB |
Arduino超级2560 | 2560接口 | 4 KB |
Arduino微 |
ATmega32U4 | 1 KB |
Arduino达芬奇 | ATmega32U4 | 1 KB |
内存
Arduino中的RAM实际上被称为SRAM或静态随机存取存储器,这是一种使用触发器来存储1位数据的RAM。另一种类型的RAM被称为动态随机存取存储器(DRAM),它使用一个电容来存储数据。
在Arduino中,SRAM存储临时数据或运行时数据(由函数、中断创建的变量)。Arduino中的SRAM实际上被分成几个部分。它们是:
- 文本
- 数据
- BSS
- 堆栈
- 堆
“文本”段包含从闪存中加载的任何指令。“数据”部分包含在草图中初始化的变量。“BSS”段包含任何未初始化的数据(并将它们初始化为0)。
最后,堆栈和堆。堆栈是RAM中实际存储函数数据和执行代码时中断的部分。如果您在运行时期间创建任何变量,那么它们将存储在堆中。
下表描述了不同Arduino板中可用的SRAM的数量。
Arduino电路板 |
单片机 | 内存大小 |
Arduino UNO | ATmega328P | 2 KB |
Arduino纳米 |
ATmega328P | 2 KB |
Arduino超级2560 | 2560接口 | 8 KB |
Arduino微 |
ATmega32U4 | 2.5 KB |
Arduino达芬奇 | ATmega32U4 | 2.5 KB |
结论
在本教程中,您了解了计算机内存,计算机内存的类型,易失性和非易失性内存,以及Arduino板上的不同类型的内存。