【发布时间】:2013-06-23 01:21:17
【问题描述】:
当我尝试为我的 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;
}
}
现在运行时我得到以下输出:
开始...
做一些工作......
属性:1
所以奇怪的部分是“状态:1”缺少前几个字符。这是因为我在对象中不正确地使用串行还是什么?
我注意到当我引用另一个也像 MyClass 一样使用串行的库时,我得到了其他奇怪的输出行为......所以我认为我做错了什么。
编辑:最后证明这实际上是一个内存问题。我包含的一个库非常大,它正在消耗可用内存。我通过添加更多调试语句发现了这一点,并发现损坏根据字符串长度和位置转移。通过使用 F() 函数,我将字符串移动到闪存中(例如,我现在运行 Serial.println(F("Starting...")); 它已经纠正了奇怪的输出。
【问题讨论】:
-
发送时字符非常不太可能丢失。接收器更有可能丢弃它们。我们看不到它。
-
可能是您溢出了串行缓冲区吗?尝试在循环()中执行延迟(5),看看是否有区别。
-
我认为您应该删除您的“编辑”评论,并使其成为您“自动接受”的答案。 SO 不仅用于解决您的问题,还可以为可能有一天会遇到您的问题的其他人提供提示。
标签: serial-port arduino