다음 5 개의 고급 명령어로 구성된 다음 무한 루프를 작성하여 Arduino Due에서 실행했습니다. 1 명령 당 1 클록 사이클을 가정하면 LED가 매 5/6 초마다 깜박일 것으로 예상했습니다. 대신 시간은 30 초 이상입니다. 이 코드의 실행 속도가 느려지는가요?Arduino의 while 루프 실행 시간이 예상과 일치하지 않습니다.
#define LED_PIN 13
/////////////////////////////////////////////////////////////////////////
void setup()
{
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
/////////////////////////////////////////////////////////////////////////
noInterrupts();
}
/////////////////////////////////////////////////////////////////////////
void loop()
{
int cnt = 0;
/////////////////////////////////////////////////////////////////////////
noInterrupts();
while(true) // infinite loop
{
if(cnt == 0) // if cnt == 0 turn off led
{
interrupts();
digitalWrite(LED_PIN, LOW);
noInterrupts();
}
// clock rate 84000000 cycles per second
if(cnt == VARIANT_MCK) // if cnt is equal to clock rate flash on led
{
interrupts();
delay(10);
digitalWrite(LED_PIN, HIGH);
delay(10); // turn on led for a small amount of time
noInterrupts();
cnt = - 1; // reset counter
}
cnt ++ ; // increment counter
}
}
/////////////////////////////////////////////////////////////////////////
조건을 계산하셨습니까? 어셈블러 코드를 확인 했습니까? –