在arduino上发生了奇怪的事情

时间:2014-05-09 18:17:26

标签: 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仅与前两个字符一起工作,而且更多不起作用)。

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

祝你好运, Mateiaru

1 个答案:

答案 0 :(得分: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);
    }
}