gpt4 book ai didi

c++ - Arduino:命令 Serial.print ("some string text") 是否占用 SRAM?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:31 25 4
gpt4 key购买 nike

我有一个相当大的 Arduino 项目(在 eclipse 中)使用 Serial.print("some string text") 命令进行大量调试消息,以便我可以一路调试。

我注意到的一件事是我达到了项目中可以拥有的这些数量的限制。如果我放太多,程序会在非常奇怪的地方停止。即:通常在我最新添加的打印命令应该执行之前很久。

目前我的项目 .hex 文件大约有 20k。 Arduino Uno 限制在 30kb 左右,对吗?所以它不应该太大。

所以我觉得实际的问题可能是这些串行命令正在填满我的 sram。这只是 2kb。我正在使用很多库。

命令 Serial.print("some string text") 是否占用 SRAM?gcc 肯定将这些字符串 cnstants 放在程序空间中吗?但也许他们不是?

还是别的什么?我有一个替代理论,某处有一个 serial.print 缓冲区,我可能只是用太多消息填充它。

最佳答案

是的,字符串默认存储在 RAM 中。虽然它们也在闪存中,但在 Arduino 启动时它们会加载到 RAM 中。

但是,如果您使用 Arduino IDE 版本 1.0 或更高版本,您可以告诉编译器直接从 Flash 读取字符串,而不用使用 F() 宏将它们加载到 RAM 中:

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

这将节省 RAM,这是一件好事,因为 RAM 比闪存少得多。有关更多详细信息,请参见此处:* http://www.arduino.cc/playground/Main/Printf

关于c++ - Arduino:命令 Serial.print ("some string text") 是否占用 SRAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com