Arduino:有没有理由调用Serial.end()?

时间:2014-07-16 01:09:30

标签: arduino

我有一些插入我的巨型传感器。它们可通过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>
}

现在从表演的角度来看,我建议在&lt; 1&gt;处插入Serial3.begin()。和Serial3.end() at&lt; 2&gt;我在其他人的代码中看到了这种模式。我的董事会会有什么影响呢?

1 个答案:

答案 0 :(得分:1)

调用end()的唯一原因是你有一些方法可以将这些IO引脚用于其他任务。因此,如果在getPH()函数之外,您可以将这两个IO引脚用于其他目的,那么您显示的模式是有意义的。否则,一次又一次地“一次又一次”地“分配”和“解除分配”串口是没有意义的......

虽然模式会起作用,但我建议在该模式中使用begin()和end()主要是有害的:

  • 你在begin()和end()
  • 中浪费执行时间
  • 浪费代码大小,包括二进制文件中的end() - 记住链接器只包含被调用的函数。

串行的好模式是在设置中调用begin()一次,从不调用end()。

对于桌面环境,人们了解到分配和释放资源是一种良好的行为。部分原因是因为它允许与系统上的其他进程共享。 对于嵌入式系统,没有其他进程可以共享 - 您的程序就是一切。一个强大的模式与桌面相对:分配你将在启动时使用的所有内容。