【Arduino官方教程第零辑】基础部分 2-4 内存

来源:互联网 发布:淘宝宝贝描述低怎么办 编辑:程序博客网 时间:2024/05/20 18:49

内存

本文所列出的数据适用于除了Due之外的所有基于AVR的板子,因为Due的硬件架构与众不同。

基于AVR控制器的Arduino板中有三个内存区块:

Flash(闪存) :用作存储程序
SRAM (静态随机存取存储器):存储变量值的地方
EEPROM(可擦可编程只读存储器) :可以长期存储信息的地方

FlashEEPROM 是掉电还能够存储信息的存储器。SRAM在掉电后会丢失所有数据。

UNO上的ATmega328芯片有以下内存配置:

Flash
SRAM 2k bytes
EEPROM 1k byte

名称 容量 Flash 32kb (5kb存储bootloader) SRAM 2kb EEPROM 1kb

Mega2560上的ATmega2560芯片有以下内存配置:

名称 容量 Flash 256kb (8kb 存储bootloader) SRAM 8kb EEPROM 4kb

请注意,在UNO上没有太多SRAM的空间。如果在程序中使用了过多的字符串,它很容易被占满。

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

例如,如上字符串(包括最后的 \0 转义字符)占用了33字节的SRAM空间(每个英文字符是一个byte,每个中文字符为两个byte

看起来微不足道,但是说不定累积起来很快就会达到2048的极限值,特别是当你有很多字符要发送到显示器上的时候。

如果你用完了SRAM空间,你的程序很可能会出现奇奇怪怪的错误;它看起来正常启动了,但是却无法运行,或者以奇怪的方式运行。为了检查是否这种情况有发生,你可以在不改变功能代码的情况下尝试注释掉一些变量或将字符串删短一些。如果接下来程序就正常运行了,就说明之前你肯定超过了SRAM的最大存储范围。

  1. 如果你的程序能和电脑这样的计算单元进行通信,那么你可以将一些大型的数据计算发送到电脑端解决。
  2. 如果你要用很大长度的数组,那么可以换用更小的数据类型。比如,int值要占用两个字节,你可以用byte(只占用一个字节)代替。
  3. 如果你不需要在程序运行时动态修改字符串内容,你可以使用PROGMEM关键字将它放入Flash中。如果你要使用EEPROM存储区块,请参看EEPROM的库内容。

原文链接
第零辑目录


更新进程

日期 日志 译者 2016年6月27日 创建并翻译文档 唐家勋

译者:唐家勋
邮箱:mrsteventang@gmail.com
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
我的微信公众号欢迎关注,2016年6月开始更新

0 0
原创粉丝点击