Arduino Serial在哪里创建?

时间:2014-02-28 19:22:14

标签: c++ serial-port arduino

查看代码,我看不到Serial的创建位置。有一个Serial_类,但似乎没有Seri​​al。当程序启动时,您可以开始使用已经存在的Serial,而不必从中创建新对象。我在arduino代码中查看,但是看到任何实际的Serial类,Serial可能是一个静态成员。有人知道它可能在哪里创建吗?

3 个答案:

答案 0 :(得分:3)

Arduino库遵循这种为您创建对象实例的不寻常模式。 Serial 对象在HardwareSerial.cpp文件中创建,接近末尾是包含大量各种硬件类型的开关的部分:

in HardwareSerial.cpp
// Preinstantiate Objects //////////////////////////////////////////////////////

这些行是变量 Serial 的定义,它是创建对象的地方。

这对某些人有用,因为对象实例 Serial 只是神奇地存在。

这个库总是包含在核心中,所以下一个问题应该是通过强制 Serial 来浪费内存吗?答案是否定的,因为如果您的代码(.INO)没有引用 Serial ,那么链接器将从最终的二进制文件中删除该对象。任何一行引用 Serial 变量都会导致链接器将这个预先实例化的对象保留在二进制文件中。

答案 1 :(得分:2)

嗯,序列定义为here

HardwareSerial Serial(&rx_buffer, &tx_buffer, &UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR, RXEN, TXEN, RXCIE, UDRIE, U2X);

以及here

extern HardwareSerial Serial;

HTH

答案 2 :(得分:1)

关于Arduino版本1.8.5

首先请参阅HardwareSerial.h,您将看到以下几行:

#if defined(UBRRH) || defined(UBRR0H)
  extern HardwareSerial Serial;
  #define HAVE_HWSERIAL0
#endif
#if defined(UBRR1H)
  extern HardwareSerial Serial1;
  #define HAVE_HWSERIAL1
#endif

然后参考HardwareSerial0.cpp。您将看到以下代码:

#if defined(UBRRH) && defined(UBRRL)
  HardwareSerial Serial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR);
#else
  HardwareSerial Serial(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0);
#endif