Empty While loop- Arduino
Empty While loop- Arduino
下面的代码打印一些文本一次,然后等待中断继续打印。while循环用于等待中断发生。我的问题是,当在while循环中添加延迟时,代码运行良好,但当没有延迟时就会失败。原因是什么?ATSAM3X8E的Atmel工作室也出现了同样的问题。
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;
}
编译器不知道更改a
值的ISR是否正在运行,因此由于其对循环条件的评估,优化了整个循环输出。您必须将a
声明为volatile
,以便告诉编译器每次都必须检查其值。
volatile int a = 0;
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 人脸跟踪arduino代码的优化
- vscode下的Arduino代码出现意外编译错误
- Arduino从Txt读取整数
- Arduino C++在构造函数中用参数声明对象数组
- C++ Boost::asio串行通信与Arduino无法写入
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 'val' Arduino 错误代码之前的预期'('
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- Arduino-C++ bool 不会从 false 变为 true
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 如何在 Arduino 延迟期间在 void loop() 中使用 serial.available()?
- Empty While loop- Arduino
- 对于基于 Arduino Sketch 的测光表,'loop'之外的功能不会触发/触发