Guard子句导致arduino程序挂起
Guard clause causes arduino program to hang
我在 Controllino Automation Maxi (Arduino Mega) 上有一个程序,它在 if 语句中使用了保护子句。
唯一的问题是,如果子句的计算结果为真,并且 return 被执行,Controllino 将重新启动。我不知道为什么。
#define CHILLER_TEMP_UPPER_THRESH 16.0
#define CHILLER_NOMINAL 8.0
if (chillTempOutlet >= CHILLER_TEMP_UPPER_THRESH)
{
if (hasChillCriticalNotifSent) return; //don't send notification if it has already been sent
sendTempCriticalNotifcation(CHILLER_NOMINAL, chillTempOutlet);
hasChillCriticalNotifSent = true;
}
在试验时我输入了 return 0;
而我收到了这个警告:
src\main.cpp: In function 'void loop()':
src\main.cpp:1065:43: warning: return-statement with a value, in function returning 'void' [-fpermissive]
if (hasChillCriticalNotifSent) return 0;
这让我相信 return 实际上退出了 loop()
函数而不是 if 语句,在 Arduino 上我认为这意味着它退出到虚无中?
在这种情况下如何使用保护子句?我可以在第一个 if 中创建一个 and,但还有什么我可以做的吗?我最初关于退出虚无的理论是否正确?
return
returns 来自调用函数或方法。
break
在 while, do
或 for
块时爆发。
如果有左括号,if
或 else
块在右括号处结束。
the return actually exits the loop() function
正确。很高兴你收到了警告。而且您的 Arduino 不会 挂起 。循环的结束只是下一个循环的开始。
一种可能的方法是检查它是否未发送,然后才执行其他代码。
if (chillTempOutlet >= CHILLER_TEMP_UPPER_THRESH)
{
if (hasChillCriticalNotifSent == false)
{
sendTempCriticalNotifcation(CHILLER_NOMINAL, chillTempOutlet);
hasChillCriticalNotifSent = true;
}
}
我在 Controllino Automation Maxi (Arduino Mega) 上有一个程序,它在 if 语句中使用了保护子句。
唯一的问题是,如果子句的计算结果为真,并且 return 被执行,Controllino 将重新启动。我不知道为什么。
#define CHILLER_TEMP_UPPER_THRESH 16.0
#define CHILLER_NOMINAL 8.0
if (chillTempOutlet >= CHILLER_TEMP_UPPER_THRESH)
{
if (hasChillCriticalNotifSent) return; //don't send notification if it has already been sent
sendTempCriticalNotifcation(CHILLER_NOMINAL, chillTempOutlet);
hasChillCriticalNotifSent = true;
}
在试验时我输入了 return 0;
而我收到了这个警告:
src\main.cpp: In function 'void loop()':
src\main.cpp:1065:43: warning: return-statement with a value, in function returning 'void' [-fpermissive]
if (hasChillCriticalNotifSent) return 0;
这让我相信 return 实际上退出了 loop()
函数而不是 if 语句,在 Arduino 上我认为这意味着它退出到虚无中?
在这种情况下如何使用保护子句?我可以在第一个 if 中创建一个 and,但还有什么我可以做的吗?我最初关于退出虚无的理论是否正确?
return
returns 来自调用函数或方法。
break
在 while, do
或 for
块时爆发。
如果有左括号,if
或 else
块在右括号处结束。
the return actually exits the loop() function
正确。很高兴你收到了警告。而且您的 Arduino 不会 挂起 。循环的结束只是下一个循环的开始。
一种可能的方法是检查它是否未发送,然后才执行其他代码。
if (chillTempOutlet >= CHILLER_TEMP_UPPER_THRESH)
{
if (hasChillCriticalNotifSent == false)
{
sendTempCriticalNotifcation(CHILLER_NOMINAL, chillTempOutlet);
hasChillCriticalNotifSent = true;
}
}