首选我们要了解到的一个信息是arduino板子上的两个参数SRAM:2KB,Flash:32KB;
对应到我们使用的电脑呢,你可以认为SRAM是我们的内存,而Flash由是硬盘。先把这个理解清楚。
#define 和 const 的区别
#define就像一个占位符。Arduino 编译器在编译时用它的值替换所有提到的这个常量。这意味着使用#define定义的值不占用任何程序空间。
另一方面,使用const定义的变量只是普通变量,其值无法更改。它们占用程序内存空间,并具有类型(这在许多情况下是有利的)。
通常,最好使用const 而不是#define来定义常量
int 与 #define的区别
int ledPin 13;
这句的意思是从内存中分配一块8位的内存,并将这块内存中的值设置成13,将这块内存命名成ledPin。
#define LED 13;
这句话的意思是,为13设置一个别名,叫LED,以后所有使用LED这个词语的时候,实际使用的就是13.但在程序运行时,并不会为这个LED分配内存,因为他并不存在。
那么具体他们有什么差别呢?
1.int ledPin 13;这句代码在内存中是有固定位置用来存储的,在程序运行的时候是可以修改13这个值的。
而#define LED 13;则是在内存中没有位置存储,程序运行时候是不可以修改的。
所以可以说,int ledPin 13;在运行更灵活。
那既然更灵活,为什么我们还会有#define LED 13;的代码在使用呢,难到有人不想更灵活?
这就用到我们刚开始说的那个SRAM:2KB了,我们的程序在运行时,一共只有2KB的空间可以用来存储运算数据,如果我们写议了很多类似的int型代码,则有可能会出现内存不足的现像,大家可以试试定议一个大的数据看看这个现像 例如 int led_list[2500];你的程序即使能编译通过,也是无法在大多数arduino板子上运行的,因为内存空间的不足。所以我们在写代码的时候要尽可能的节约对SRAM的使用,这就出现了#define LED 13;这种写法了。
另外,还可以告诉大家的是
用int ledPin 13;与 #define LED 13;在使用digitalWrite的时候,使用#define LED 13;会更快一点,虽然只是一点点,但相对比较起来,可能就有很大不同了。
大家可以用些代码来测量一下,例如:
//下面的代码我没测试过,如果看不出差距,可以将那个20000再调大一点。
#define LED 13
int ledPin 13;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned long start1,start2,end1,end2;
int i,tag=0;
start1=millis();
for(i=0;i<20000;i++)
{
digitalWrite(LED, tag);
tag=!tag;
}
end1=millis();
start2=millis();
for(i=0;i<20000;i++)
{
digitalWrite(ledPin , tag);
tag=!tag;
}
end2=millis();
Serial.println(end1-start1);
Serial.println(end2-start2);
}