我有一些传感器插入到我的mega中。它们可以通过 Serial 和 Serial2 等访问。
我的主板每 X 分钟读取一次传感器,然后向我的服务器提交 POST 请求。 delay(X * 60 * 1000)
用于轮询等待时间。
这就是我的 getPH() 方法的样子:
void getPH() {
//<1>
char inchar;
while (Serial3.available()) {
inchar = (char)Serial3.read();
if (inchar != '\r') {
phSensorString += inchar;
}
}
//<2>
}
现在从性能的角度来看,我是否建议在 <1> 处插入 Serial3.begin()
并在 <2> 处插入 Serial3.end()
?我在其他人的代码中看到过这种模式。不这样做会对我的董事会产生什么影响?
最佳答案
调用 end() 的唯一原因是您是否有某种方法可以将这些 IO 引脚用于其他任务。因此,如果在 getPH() 函数之外,您可以将这 2 个 IO 引脚用于其他目的,那么您显示的模式就有意义。否则,一次又一次地“分配”和“释放”串口是没有意义的......
虽然该模式可以发挥作用,但我建议在该模式中使用 begin() 和 end() 大多是有害的:
- 你在 begin() 和 end() 中浪费了执行时间
- 浪费代码大小,包括二进制文件中的 end() - 请记住链接器只会包含调用的函数。
串行的良好模式是在设置中调用 begin() 一次,并且从不调用 end()。
对于桌面环境,人们知道分配和释放资源是良好的行为。部分原因是这允许与系统上的其他进程共享。 对于嵌入式系统来说,没有其他进程可以共享——您的程序就是一切。与桌面相反的强大模式:分配您在启动时将使用的所有内容。
关于Arduino:有什么理由调用 Serial.end() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770622/