繁体   English   中英

Arduino Mega2560 在连续两次调用analogWrite 后重启

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM