arduino内存

内部储存单元由几种不同的介质组成

介质 名称 特点 储存特点
FLASH 闪存(U盘) 价格低,读写慢 数量较大的静态信息。断电后可以保持存储内容。存储程序
SRAM 静态随机存储器 价格高,读写快 数量较小的动态信息,断电后不可以保持存储内容。储存程序变量
EEPROM 电可擦除可编程只读存储器 可擦写可编程 ,读写速度慢 只能读取信息,不能储存信息。(例如光盘)用于需要断电保持的程序变量

 

在EEPROM中读取和储存数据

对于arduino uno其有1024个字节(1kb)

可以储存1024个0~255十进制数

 

内存优化

SRAM资源远远小于FLASH资源

优化SRAM

串口监视器输出时用

用SRAM储存

1
Serial. println("Taichi-Maker");

用FLASH储存

1
Serial. println (F("Taichi-Maker"));

 

建立常量

用SRAM储存静态信息会对使用空间进行浪费

此时我们可以用FLASH分担SRAM的压力

将常量储存在FLASH中

1
2
const int a = 125;//储存在SRAM中
const int PROGMEM a = 125//储存在Flash中

 

局部变量和全局变量

我们可以从下列代码中来体会全局变量和局部变量的特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int globalVarl;//全局变量1
int globalVar2;//全局变量2
void setup(){

void loop(){
function_1();//调用函数1
function_2();//调用函数2
}


}
void function_1(){
int localVarl;//函数1局部变量
}
void function_2{
int localVar2;//函数2局部变量

内存 特点
SRAM 共享的局部变量
SRAM 独享的全局变量

要更好地优化空间我们就需要尽量多使用==局部变量==代替==全局变量==

 

用bool型的变量代替int型的变量做逻辑判断

用整形占用两个字节

1
2
3
4
5
6
7
8
int a;  //变量a用于逻辑判断
void setup(){

void loop(){
if(a== 1){
//变量a等于1时执行的内容
}

用bool占用一个字节

1
2
3
4
5
6
7
8
bool a;//变量a用于逻辑判断
void setup(){

void loop(){
if(a == 1){
//变量a等于1时执行的内容
}

尽量使用占用内存少的数据类型

具体的数据类型及其相关信息可以参考这个网站Arduino常用数据类型简介 – 太极创客 (taichi-maker.com)

(8位微控制器)

 

优化FLASH

即优化我们的arduino程序

删除无用代码

  • 无用库
  • 无用变量
  • 无用函数
  • 无用代码