const int led = 13;
Doğru yöntem budur. Ya da:
const byte led = 13;
Kaç tane pim var?
Öğreticilerden bazıları, olabilecekleri kadar kalite kontrolünden pek geçmedi.
Performans kullanmak daha iyi olacak const byte
, kıyaslayacağınız int
zaman derleyici ne yaptığınızı anlayacak kadar akıllı olabilir.
Yapabilecekleriniz, insanları kendi kodunuzda kullanarak daha verimli teknikleri kullanmaya yavaşça teşvik etmek.
Yorumlara verilen cevaplar
Bir yorumcu, byte
standart C olmadığını önerdi . Bu doğru, ancak bu bir Arduino StackExchange sitesi ve Arduino IDE tarafından sağlanan standart türlerin kullanılmasının kabul edilebilir olduğuna inanıyorum.
Arduino.h'de şu satır var:
typedef uint8_t byte;
Bunun tam olarak aynı olmadığını unutmayın unsigned char
. Bkz: uint8_t - imzasız karakter ve ne zaman uint8_t - imzasız karakter nedir? .
Başka bir yorumcu, bayt kullanımının performansı arttırmayacağını belirtti, çünkü sayılardan daha küçük sayılar int
teşvik edilecektir int
(bu konuda daha fazla bilgi istiyorsanız, Tamsayı Promosyon Kurallarına bakınız).
Bununla birlikte, bir const tanımlayıcısı bağlamında , derleyici her durumda etkin kod üretecektir. Örneğin, "yanıp sönme" yi sökmek bunu orijinal biçimde verir:
00000086 <loop>:
86: 8d e0 ldi r24, 0x0D ; 13
88: 61 e0 ldi r22, 0x01 ; 1
8a: 1b d1 rcall .+566 ; 0x2c2 <digitalWrite>
Aslında, aynı kodu üretir 13
:
- Değişmez
- Bir
#define
- Bir
const int
- Bir
const byte
Derleyici bir sicile ne zaman bir sayı sığabileceğini ve ne zaman yapamayacağını bilir. Ancak , amacınızı belirten kodlama kullanmak iyi bir uygulamadır . O Making numara değişmeyeceğini temizlemek yapar ve bunun yapımı (veya ) bu size az sayıda beklediklerini temizlemek yapar.const
byte
uint8_t
Kafa karıştırıcı hata mesajları
Kaçınılması gereken diğer bir önemli neden, #define
bir hata yaparsanız aldığınız hata mesajlarıdır. Bir hata olan bu "göz kırpma" taslağını göz önüne alın:
#define LED = 13;
void setup() {
pinMode(LED, OUTPUT); // <---- line with error
}
void loop() {
digitalWrite(LED, HIGH); // <---- line with error
delay(1000);
digitalWrite(LED, LOW); // <---- line with error
delay(1000);
}
Yüzeyde Tamam görünüyor, ancak bu hata iletilerini oluşturur:
Blink.ino: In function ‘void setup()’:
Blink:4: error: expected primary-expression before ‘=’ token
Blink:4: error: expected primary-expression before ‘,’ token
Blink:4: error: expected `;' before ‘)’ token
Blink.ino: In function ‘void loop()’:
Blink:8: error: expected primary-expression before ‘=’ token
Blink:8: error: expected primary-expression before ‘,’ token
Blink:8: error: expected `;' before ‘)’ token
Blink:10: error: expected primary-expression before ‘=’ token
Blink:10: error: expected primary-expression before ‘,’ token
Blink:10: error: expected `;' before ‘)’ token
Vurgulanan ilk satıra (satır 4) bakarsınız ve hatta bir "=" sembolü görmezsiniz . Artı, çizgi iyi görünüyor. Şimdi sorunun burada ne olduğu ( = 13
bunun yerine geçmekte olduğu LED
) oldukça açık , ancak satır kodda 400 satır daha ileride olduğunda, sorunun LED'in tanımlandığı şekilde olduğu açık değil.
İnsanları bu kadar düşerken gördüm (kendim dahil).