我正在使用带有Asynclabs库的Arduino平台(一个用于旧的yellowjacket和redback wifi板的开源wifi库)。
某些东西打破了Arduino String对象(注意大写S)。
我只是使用一个简单的测试:
Serial.println("Test Strings:\n");
String junk = "Do Strings print or what?";
Serial.println(junk);
while (1) { delay(2000); Serial.print("+");}
这会在setup()块开始时按照您的预期进行打印。当我将它移动到wifi.init()调用之后,它仍然有效。但是当我在调用短网络交互后移动它时,它会被忽略,就好像它不在那里一样。除了第一个没有String对象的打印外,不会生成任何输出。
一切都编好了 - 我希望编译器会告诉我是否有库冲突。 我通过库文件grep'd用于“String”和“string”这个词的其他用途但是在那里什么都没看到。我将名为strings.c的文件重命名为canned_strings.c。仍然没有改善。
我有点失落。还有其他要寻找的东西吗?
[一个注意事项 - 我看到几个库文件包含<string.h>
- 这是一个不推荐使用的Arduino lib文件,应该切换到其他文件吗?调查......]
-Ross
答案 0 :(得分:0)
最终很明显,String对象对于Arduino的紧凑资源来说太过密集了。
通过从代码中消除所有String类型的使用,并使用包含大量指针的char数组,解决了这个问题。这对RAM更加友好。
[另外 - 在Asynclabs Wifi库中,减少数据包的大小有助于进一步释放一些RAM。强烈推荐的策略,以取得任何进展。]