我有一个很大的Arduino项目(在eclipse中)使用Serial.print("一些字符串文本")命令继续进行大量调试消息,以便我可以一路调试.
我注意到的一件事是,我在项目中可以拥有多少这样的限制.如果我放太多,程序会在非常奇怪的地方停止.即:经常在我最新添加的打印命令执行之前很久.
我的项目.hex文件目前约为20k.Arduino Uno限制在30kb左右吗?所以它不应该太大.
所以我觉得实际的问题可能是这些串行命令可能填满了我的sram.这只是2kb.我使用了很多库.
命令Serial.print("some string text")占用SRAM吗?当然gcc把这些字符串cnstants放在程序空间中?但也许他们不是?
或者是别的什么?我有一个替代理论,在某处有一个serial.print缓冲区,我可能只是填充了太多的消息.
Mar*_*rty 14
Yup,字符串默认存储在RAM中.虽然它们也在闪存中,但是当Arduino启动时它们被加载到RAM中.
但是,如果您使用Arduino IDE版本1.0或更高版本,您可以告诉编译器直接从Flash读取字符串,而不是使用F()宏将它们加载到RAM中:
Serial.Println(F("This string is read from Flash!"));
Run Code Online (Sandbox Code Playgroud)
这将节省RAM,这是一件好事,因为RAM比Flash少得多.有关详细信息,请参见此处:*http://www.arduino.cc/playground/Main/Printf
| 归档时间: |
|
| 查看次数: |
6270 次 |
| 最近记录: |