Arduino analogWrite(41024)是否可能导致ESP8266挂起?
我不知道打这样的电话:Arduino analogWrite(41024)是否可能导致ESP8266挂起?,arduino,infinite-loop,esp8266,arduino-esp8266,Arduino,Infinite Loop,Esp8266,Arduino Esp8266,我不知道打这样的电话: analogWrite(41024); 可能导致ESP8266挂起 我这么问是因为我的ESP8266在正常工作一周后挂起了。调试起来很糟糕,但我设法将问题缩小到使用analogWrite()的函数。我分析了它,我突然意识到值的范围是从0到1024,而不是从0到255,对吗 这是Arduino的analogWrite()函数: extern“C”无效模拟写入(uint8\u t引脚,int值){ 如果(引脚>=ESP\U引脚\U偏移){ __模拟写入(引脚-ESP引脚偏移
analogWrite(41024);
可能导致ESP8266挂起
我这么问是因为我的ESP8266在正常工作一周后挂起了。调试起来很糟糕,但我设法将问题缩小到使用analogWrite()的函数。我分析了它,我突然意识到值的范围是从0到1024,而不是从0到255,对吗
这是Arduino的analogWrite()
函数:
extern“C”无效模拟写入(uint8\u t引脚,int值){
如果(引脚>=ESP\U引脚\U偏移){
__模拟写入(引脚-ESP引脚偏移,值);
}
否则{
wifio::模拟写入(引脚、值);
}
}
它调用了一些我不知道的SDK命令,我不确定是否可以验证它们在做什么?调用analogWrite()
时,如果值超出允许的范围,则可能会导致未定义的行为;在处理任何其他事项之前,您必须先纠正此问题:
ESP8266的语法:模拟写入(引脚,参数值引脚:引脚
要写入。值:占空比:介于0(始终关闭)和1023之间
(总是开着)
在更正此问题之前,请忽略其他调试任务。在ESP8266上,默认范围为0-1023,如联机参考中所述:很高兴知道,但1024仍然是1023+1。我发现“滚动”的值超过了没有不良副作用,您确定答案吗?我没有测试它;相反,我将所有值限制在定义的范围内。但我的答案基于一个一般原则,即遵循库函数允许的范围是一种良好的做法。无符号值滚动不会带来任何好处。您可以使用保存cr的库EEPROM中的ash信息用于堆栈跟踪:不幸的是,它不会保存任何内容,因为没有崩溃。我的设备已连接到串行24小时。如果出现崩溃,则不会有问题,因为ESP8266在此之后重新启动。