Got*_*ods 3 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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当它运行时,我得到以下输出:
开始...
做一些工作...
atus: 1
所以奇怪的部分是“状态:1”缺少前几个字符。这是因为我在对象中不正确地使用串行还是什么?
我注意到当我引用另一个像 MyClass 一样使用串行的库时,我得到了其他奇怪的输出行为......所以我认为我做错了什么。
编辑:最后,这实际上是一个内存问题。我包含的一个库非常大,它正在消耗可用内存。我通过添加更多调试语句发现了这一点,并发现损坏会根据字符串长度和位置发生变化。通过使用 F() 函数,我将字符串移动到闪存中(例如,我现在运行 Serial.println(F("Starting...")); 并且它更正了奇怪的输出。
您不能在 C++ 中添加字符串和整数。如果编译失败,对你来说会更好:
Serial.println("Status: " + status);
Run Code Online (Sandbox Code Playgroud)
相反,编译器猜测了一些东西。它猜错了。用这个:
Serial.print("Status :");
Serial.println(status);
Run Code Online (Sandbox Code Playgroud)
或者为了完全控制输出数字和字符串,学习使用 C 字符串格式,sprintf()
| 归档时间: |
|
| 查看次数: |
4944 次 |
| 最近记录: |