gpt4 book ai didi

c++ - 为什么全局对象构造函数在 Arduino 中只打印前 2 个字符?

转载 作者:行者123 更新时间:2023-11-30 02:41:20 33 4
gpt4 key购买 nike

我创建了一个名为 Fred 的类,这里是 .h 和 .cpp 文件:

弗雷德.h

#ifndef Fred_h
#define Fred_h
#include "Arduino.h"
class Fred
{
public:
Fred();
};
#endif

弗雷德.cpp

#include "Fred.h"
Fred::Fred()
{
Serial.begin(115200);
Serial.println("Hello Arduino!");
}

在草图中,我刚刚全局初始化了类对象:

#include <Fred.h>
Fred a;
void setup()
{}
void loop()
{}

它应该打印 Hello Arduino!在串行终端中,但它只打印前两个字节“He”,这很奇怪!我读过有关 SIOF(静态初始化顺序 Fiasco)的信息,这可能是问题所在,但如果是这样,为什么它打印 2 个字节而不是不打印完全没有。如果我在设置函数中声明了该对象,它就可以正常工作。

最佳答案

您不能从静态对象的构造函数访问 Serial,因为不能保证 Serial 会被设置。在输入 main 之前,您不想做任何“实际工作”。

arduino的串口实现大概只有两个字符的硬件缓冲。一旦发送了前两个,其余的就被丢弃了,因为对它们进行排队和安排中断服务的必要逻辑可能尚未设置。

因此第一个字符立即开始发送。第二个字符位于等待第一个字符完成的硬件缓冲区中。剩余的字符应该被传送到中断处理程序(这样每次缓冲区为空,因为前一个字符已经完全发送,一个新的字符可以开始被发送出去),但显然还没有设置。

关于c++ - 为什么全局对象构造函数在 Arduino 中只打印前 2 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211986/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com