arduino中 #define、const和int 的差别

首选我们要了解到的一个信息是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);

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值