c++ - arduino 上发生了奇怪的事情

标签 c++ arduino allocation

我的 arduino 上有一些非常奇怪的东西。我画了一个草图(我无法发布它,因为我对其进行了编辑,现在它还有其他问题)并且它有一些问题:

当我使用阅读时它完美运行

char c;
String cmd = "";
while (Serial.available()) {
    c = Serial.read();
    cmd.concat(c);
}

但是在我添加了一个新函数(我什至没有调用它)之后它开始只读取前 2 个字符。如果我再添加一个(相同,我不调用它),则该字符串为空。发生了什么??

我也试过了

char c;
String cmd = "";
while (Serial.available()) {
    c = Serial.read();
    Serial.println(c);
    cmd.concat(c);
}

它会准确地打印出我输入的内容。看起来 concat 被窃听了。我阅读后发现这是一个内存分配错误或其他问题,但它真的很奇怪。我意识到这取决于我的代码的二进制大小(如果它有大约 10.000 个字节,它工作正常,11.000 个仅适用于前 2 个字符,更多根本不起作用)。

请帮忙。我知道我的代码没有错,我需要帮助解决这个错误。

最好的问候, 马泰亚鲁

最佳答案

在 arduino 中,我想这就是你所拥有的:

void loop(){
    char c;
    String cmd = "";
    while (Serial.available()) {
        c = Serial.read();
        Serial.println(c);
        cmd.concat(c);
    }
}

在该代码中,当一个新字符被发送(并且您已经读取了整个缓冲区)时,您已经

Serial.available() = FALSE

所以主循环设置

cmd = ""

并且您丢失了以前的数据。修复在主循环外初始化 cmd,并在循环外初始化 c:

char c;
String cmd = "";

void loop(){
    while (Serial.available()) {
        c = Serial.read();
        Serial.println(c);
        cmd.concat(c);
    }
}

关于c++ - arduino 上发生了奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571460/

相关文章:

c++ - 这个 OpenCV 库中如何使用 union ?

c++ - julia Cxx 在模块中封装不同的行为

c++ - 如何在 C++ 中使用自定义消息抛出 std::bad_alloc?

c - 通过串口将数据从 C 发送到 arduino 时,我应该进行任何转换吗?

c++ - 有没有办法打印一个对象分配的堆内存量?

c++ - std::string find 是否要求 pos 小于字符串大小?

c++ - arduino//使用nRF24L01库通过Ghz进行树莓派连接

android - 与 Arduino 一起使用 Android

haskell - 导入分配的外部函数时是否需要使用IO?

c - 为什么 alloca() 的使用不被认为是好的做法?