为什么这段代码会导致Arduino Mega2560不断重置?
void setup() {
Serial.begin(9600);
Serial.println("SETUP");
delay(500); //without this line Serial prints "SESESESESE"
analogWrite(10, 100);
analogWrite(11, 50); //reboots after this line
}
void loop() {
Serial.println("LOOP"); //doesn't reach here
}
Arduino串行输出以下内容:
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
注意事项:
1)如果我将10和11引脚替换为其他引脚(例如8和9),则Arduino不会重新启动,但也会通过12和13引脚重新启动(我猜10-13引脚在某种程度上很特殊)。 / p>
2)如果我在对analogWrite
的调用中使用相同的值(例如100和100),则Arduino无法重新启动。
答案 0 :(得分:1)
如果将引脚设置为:
void setup() {
pinMode(10, OUTPUT); // sets the pin as output
pinMode(11, OUTPUT); // sets the pin as output
此类复位通常是由于电源故障,噪声或连接不良(原型板不良)或LED引脚不良(例如,电阻太小或损坏或引脚损坏等)引起的。 如果您的巨型计算机没有硬件缺陷,并且有足够的电源或附加的硬件引起该缺陷,则它应该可以正常工作。
答案 1 :(得分:1)
显然,应该归咎于编译器的优化。在程序的开头添加了这两行之后,它终于可以正常工作了:
void setup() __attribute__((optimize("-O1")));
void loop() __attribute__((optimize("-O1")));