Arduino串行输出丢弃字符

时间:2013-06-23 01:21:17

标签: serial-port arduino

在尝试为我的Arduino Uno编写代码时,我在这里有一个奇怪的串行输出。

我有这个原型代码:

MyClass myclass;

void setup()
{
   Serial.Begin(9600);
   Serial.println("Starting...");
}

void loop()
{
   int status = myclass.DoWork();
   Serial.println("Status: " + status);
}

class MyClass 
{
   int DoWork()
   {
      Serial.println("Doing some work...");
      return 1;
   }
}

现在,当我运行时,我得到以下输出:

...起动

做一些工作......

atus:1

所以奇怪的部分是“状态:1”缺少前几个字符。这是因为我在对象中使用串口不正确还是什么?

我注意到当我引用另一个也使用像MyClass这样的序列的库时,我得到了其他奇怪的输出行为......所以我认为我做错了。

编辑:最后,实际上这是一个内存问题。我所包含的库非常大,并且消耗了可用的内存。我通过添加一些调试语句找到了这一点,发现根据字符串的长度和位置,腐败发生了变化。通过使用F()函数,我将字符串移动到闪存(例如我现在运行Serial.println(F(“Starting ...”));它已经纠正了奇怪的输出。

3 个答案:

答案 0 :(得分:4)

您无法在C ++中添加字符串和整数。如果编译失败,那对你来说会更好:

Serial.println("Status: " + status);
相反,编译器猜到了什么。它猜错了。使用此:

Serial.print("Status :");
Serial.println(status);

或完全控制输出数字和字符串学习使用C字符串格式, sprintf()

答案 1 :(得分:0)

最终,这实际上是一个内存问题。我所包含的库非常大,并且消耗了可用的内存。我通过添加一些调试语句找到了这一点,发现根据字符串的长度和位置,腐败发生了变化。通过使用F()函数,我将字符串移动到闪存(例如我现在运行Serial.println(F(“Starting ...”));它已经纠正了奇怪的输出。

答案 2 :(得分:0)

还有一个可能的解释。

我正在运行minicom进行监控,我通常喜欢在重置设备后自动重新连接。

我昨晚最小化了一个运行minicom的终端,今天我开始了一个新的实例,不知何故也连接到同一个串口(如果可能的话)。

我认为minicom的两个实例大致是随机读取大约50%的连续字符,这让我的文字很乱。