Пустой цикл пока- Arduino

Следующий код печатает некоторый текст один раз и ожидает прерывания, чтобы продолжить печать.
Цикл while используется для ожидания прерывания.
Моя проблема в том, что код работает нормально, когда добавляется задержка внутри цикла while, но не работает, когда нет задержки.
в чем причина?
Та же проблема происходит в студии Atmel для ATSAM3X8E.

int a = 0;
int thisByte = 33;

void setup()
{

Serial.begin(9600);
attachInterrupt(0, keyPadISR, LOW);
Serial.println("ASCII Table ~ Character Map");
}

void loop()
{
// This is a dummy code to say program is running
Serial.write(thisByte);
Serial.print(", dec: ");
Serial.print(thisByte);
Serial.print(", hex: ");
Serial.print(thisByte, HEX);
Serial.print(", oct: ");
Serial.print(thisByte, OCT);
Serial.print(", bin: ");
Serial.println(thisByte, BIN);

while(a != 10)
{
// Program does not work if u delete this delay(1).
delay(1);
}

thisByte++;
}// This is the key pad interrupt
void keyPadISR()
{
a = 10;
}

3

Решение

Компилятор не знает, что ISR, который изменяет значение a когда-либо выполняется, и поэтому оптимизировал весь цикл из-за его оценки состояния цикла. Вы должны объявить a как volatile чтобы сказать компилятору, что его значение должен проверяться каждый раз.

volatile int a = 0;
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]