const int led = 13;
이것이 올바른 방법입니다. 또는:
const byte led = 13;
핀이 몇 개입니까?
일부 자습서는 품질 관리를 제대로 수행하지 못했습니다.
성능은 컴파일러 const byte
와 비교 하여 더 잘 사용할 수 int
있지만 컴파일러는 현명한 작업을 실현할 수 있습니다.
당신이 할 수있는 일은 사람들이 자신의 코드에서보다 효율적인 기술을 사용하도록 부드럽게 격려하는 것입니다.
의견에 대한 답변
한 의견 제안자는 byte
표준 C가 아니라고 제안했습니다 . 이것은 맞지만 이것이 Arduino StackExchange 사이트이며 Arduino IDE에서 제공하는 표준 유형을 사용하는 것이 허용됩니다.
Arduino.h에는 다음 줄이 있습니다.
typedef uint8_t byte;
이와 정확히 동일하지는 않습니다 unsigned char
. 참조 서명 숯불 대 uint8_t 와 때 uint8_t ≠ 서명 숯불입니까? .
다른 의견 제시자는 바이트보다 작은 숫자 int
가 승격 되기 때문에 바이트를 사용한다고해서 반드시 성능이 향상되는 것은 아니라고 제안했습니다 int
(더 자세한 내용은 정수 승격 규칙 참조).
그러나 const 식별자와 관련하여 컴파일러는 어떤 경우에도 효율적인 코드를 생성합니다. 예를 들어, "깜박임"을 분해하면 원래 형태로 나타납니다.
00000086 <loop>:
86: 8d e0 ldi r24, 0x0D ; 13
88: 61 e0 ldi r22, 0x01 ; 1
8a: 1b d1 rcall .+566 ; 0x2c2 <digitalWrite>
실제로 다음과 같은 경우 동일한 코드를 생성합니다 13
.
- 리터럴
- 입니다
#define
- 입니다
const int
- 입니다
const byte
컴파일러는 숫자를 하나의 레지스터에 넣을 수있는 시점과 실패 할 수있는 시점을 알고 있습니다. 그러나 의도 를 나타내는 코딩을 사용 하는 것이 좋습니다 . 이 만들기 는 번호가 변경되지 않습니다 취소 만들고, 그것을 만드는 것은 (나 ) 당신이 소수를 기대하고 있음을 삭제합니다.const
byte
uint8_t
혼란스러운 오류 메시지
피해야 할 또 다른 주요 이유 #define
는 실수를했을 때 나타나는 오류 메시지입니다. 오류가있는이 "깜박임"스케치를 고려하십시오.
#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);
}
표면에는 문제가 없지만 다음과 같은 오류 메시지가 생성됩니다.
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
첫 번째 강조 표시된 행 (4 행)을 보고 "="기호도 표시하지 않습니다 . 또한 선이 잘 보입니다. 이제 문제가 무엇인지 분명히 알 수 있지만 ( = 13
대체되고 있음 LED
) 코드에서 줄이 400 줄 더 떨어져 있으면 LED가 정의되는 방식에 문제가 있는지 확실 하지 않습니다.
나는 사람들이 이것에 여러 번 넘어지는 것을 보았다.