ESP8266无法将字符添加到很长的字符串(> 8000个字符)

问题描述 投票:0回答:1

从HTTPS请求正确获取有效负载后,将客户端的字符添加到String中后,大约8000个字符后停止,然后恢复并再次停止几次这是我的代码的片段:

long streamSize = 0;
Serial.println("Now reading payload...");
while (stream.connected()) {
    while (stream.available() > 0) {
        char ch = (char)stream.read();
        Serial.println((String)"Reading [" + ++streamSize + "] " + ch);
        ret += ch;
        Serial.println(ret.length());
    }
}

哪个工作正常,直到:

Reading [8685] t
8685
Reading [8686] r
8686
Reading [8687] u
8687
Reading [8688] m
8687
Reading [8689]  
8687
Reading [8690] e
8687
[Resumes correctly appending chars]
Reading [9226] i
8748
Reading [9227] p
8749
Reading [9228] t
8750
Reading [9229] i
8751
Reading [9230] o
8751
Reading [9231] n
8751

如此多次。内存堆大小似乎不是问题,因为在附加所有内容后,我从system_get_free_heap_size()中获得了14128个可用字节。我正在使用Wemos D1 R1和this is the file I'm trying to fully read,通过Github API进行测试

string heap-memory esp8266 arduino-esp8266
1个回答
1
投票
我发现Arduino由于可用内存量少而无法连接字符串。此外,Arduino中的String类似乎没有错误处理程序,因此当(例如)内存碎片过多时,它可能会默默地失败。

参见此处:from Arduino forum此处:from a discussion in Stack Overflow

在许多情况下,他们建议您可以通过

String reserve(int)调用来预先分配缓冲区。

也许您无法预先知道弦将增长到多大,但是也许您可以管理它。例如,通过两次调用您的https目标。第一次只是想知道答案有多大(这样您就可以分配确切的内存量);第二次有效阅读。
© www.soinside.com 2019 - 2024. All rights reserved.