Arduino的:是命令Serial.print占据SRAM(“一些字符串文本”)?(Arduino

2019-08-01 06:52发布

我有一个相当大的Arduino的项目(在Eclipse)发生的事情与很多使用Serial.print(“一些字符串文本”)调试信息的命令,这样我可以沿途调试。

我注意到一件事是,我达到了我能有多少,这些项目有一个限度。 如果我把太多,程序停止在很奇怪的地方。 即:长常在我最新加入了打印命令应该执行。

我的项目.hex文件当时是20K左右。 30KB左右右Arduino的乌诺限制? 所以应该不会太大。

所以,我觉得实际的问题可能是,也许这些串行指令填满了我的SRAM。 这仅仅是2KB。 我使用了很多库。

在命令Serial.print占据SRAM(“一些字符串文本”)? 当然GCC把这些串cnstants在程序空间? 但也许他们都没有?

或者是别的什么? 我有一个替代理论有一个serial.print缓冲的地方,而且我可能只是有太多的信息填充它。

Answer 1:

是啊,串默认存储在RAM中。 虽然他们在闪存太,但他们装入RAM Arduino的靴子。

但是,如果您使用的Arduino IDE 1.0或更高版本,你可以告诉编译器直接从闪存读取字符串,不要打扰它们加载到RAM与F()宏:

Serial.Println(F("This string is read from Flash!"));

因为有比RAM闪存小得多,这将节省RAM这是一件好事。 在这里看到更多的细节:* http://www.arduino.cc/playground/Main/Printf



Answer 2:

这不是我的代码,但我发现,在该解决方案: http://www.utopiamechanicus.com/article/low-memory-serial-print/对于调试非常好。 printf的,闪速存储器的使用,和宏体面的组合这样的转化,通常除去作为容易“” 从Serial.print()。

我是一个总的小白C ++和Arduino的虽然,希望有人发现它是有用的。



Answer 3:

请尝试将字符串标记PROGMEM,应该将它们放置在闪光。 Arduino的似乎并不具有Seri​​al.write实施了PROGMEM,因此需要一个MEM-副本。 见http://arduino.cc/en/Reference/PROGMEM的细节(字符串数组)。

编辑: http://deans-avr-tutorials.googlecode.com/svn/trunk/Progmem/Output/Progmem.pdf很好地解释了PROGMEM说法。



Answer 4:

是的,它得到的存储在RAM中默认。 您可以使用@Marty的解决方案。

另外,您还可以使用MemoryFree库来跟踪你的记忆中。



文章来源: Arduino: Is the command Serial.print(“some string text”) occupying SRAM?
标签: c++ arduino ram