Loading...

Learning   Examples | Foundations | Hacking | Links

存储器

用在 Arduino (ATmega168) 上的单片机含有三类存储器:

  • Flash memory (程序空间), 这里保存着 Arduino 程序。
  • SRAM (静态随机存取存储器) 程序运行时创建和使用的变量都放在这里。
  • EEPROM 需要长期保存的信息存放的地方。

Flash 存储器和 EEPROM 存储器是非易失性的(掉电后信息仍然存在)。SRAM 是易失性的,掉电后信息丢失。

ATmega168 芯片的存储器容量如下:

Flash  16k 字节 (其中2k被bootloader使用)
SRAM   1024 字节
EEPROM 512 字节

注意可用的 SRAM 空间并不多。如果你的程序中有大量的字符串,很容易就会把它用完。比如象这样的声明:

char message[] = "I support the Cape Wind project.";

在 SRAM 中占用了 32 字节(每个字符占 1 个字节)。这看起来并不多,不过用完这1024字节也是很快的,特别是当你要在显示设备上输出一大堆的文字,或是一个大的查找表时。

如果用完了 SRAM,你的程序会出错: 看起来上传成功了,但是不能运行,或者运行了但表现得很奇怪。为了确认是这个原因引起的,你可以尝试注释掉或缩短字符串和其他数据结构(不要改变代码)。如果运行成功了,那就说明很可能是SRAM用尽了。有一些办法来对付这种情况:

  • 如果你的程序在和电脑通讯,你可以试着把数据转移到电脑上,或在电脑上运算,以减少 Arduino 的占用。

  • 如果有查找表或别的大型数组,请使用足够保存你所需数值的最小的数据类型; 例如,int 类型占用2字节,而 byte 类型仅需要 1 字节(但是只能保存更小范围的值)。

  • 如果在程序运行时不需要修改字符串或数据,你可以把它们保存在flash内存(程序空间)中; 要这样做,使用关键词 PROGMEM

要使用 EEPROM, 参见 EEPROM library.

基础