Arduino:有什么理由调用 Serial.end() 吗?

标签 arduino

我有一些传感器插入到我的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/

相关文章:

arduino - RFID RC522 是否能够读取 NFC 标签?

linux - Arduino - Linux - URG 库

c++ - 树莓派 I2C

c++ - 用毫秒替换延迟

c++ - 使用 alloca 分配内存时转换无效

android - 用于处理的游戏 handle 控制 + 用于控制 Arduino 机器人的 Android

c++ - 使用 strtok 拆分字符串(嵌套)

arduino - 创建网络适配器 - 有多难?

c++ - 在 C++ 中将日期时间字符串拆分为日期时间

android - 使用 Android ADK 与 Arduino Mega ADK 通信时 build.xml 的问题