[英]Arduino Mega2560 reboots after two consecutive calls to analogWrite
为什么这段代码会导致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)如果我用其他一些引脚(例如 8 和 9)替换引脚 10 和 11,Arduino 不会重启,但它也会用引脚 12 和 13 重启(我猜引脚 10-13 有点特殊)。
2)如果我在对analogWrite
的调用中使用相等的值(例如100和100),Arduino不会重启。
如果您将引脚设置为:
void setup() {
pinMode(10, OUTPUT); // sets the pin as output
pinMode(11, OUTPUT); // sets the pin as output
此类复位通常是电源故障、噪声或连接不良(原型板不良)或 LED 引脚不良(例如:电阻器太小或损坏,或引脚损坏等)。 如果您的 mega 没有硬件缺陷并且有足够的电源或附加的硬件导致此缺陷,它应该按预期工作。
显然,编译器的优化是罪魁祸首。 在程序开始时添加这两行后,它终于可以正常工作了:
void setup() __attribute__((optimize("-O1")));
void loop() __attribute__((optimize("-O1")));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.