【问题标题】:Dealing with large Strings/ Arrays?处理大型字符串/数组?
【发布时间】:2011-12-20 17:38:05
【问题描述】:

我需要解析大量数据。当我的意思很多时,我说的是大约 5,000 到 10,000 个字符。现在,我的代码可以处理 285 条数据。我正在使用 Arduino 原型平台。这是我的loop() 在我的sketch

void loop() {

    if (client.available()) {
        char inChar = client.read();
        currentLine += inChar;
        if (inChar == '\n') { currentLine = ""; }

        if (currentLine.endsWith("[start]")) {
            readingData = true;
            theData = "";
        }

        if (readingData) {
            if (inChar != '[') {
                 theData += inChar;
                 //Serial.println("something!");
            }
            else {
                readingData = false;
                int count = theData.length()-0;
                theData = theData.substring(1, count);
                Serial.println(theData);
                doAction(100,count,theData);
                client.stop();
            }
        }
    }

    if (!client.connected()) {
        Serial.println();
        Serial.println("disconnecting.");
        client.stop();
        for(;;)
            ;
    }
}

我应该将其拆分为 20 多个字符串并将它们放入一个数组中吗?我不确定我的 2KB RAM 是否能够处理。

【问题讨论】:

  • 你的 10000 个字符从何而来?这甚至不太可能适合 AVR 的内存 IIRC。
  • @JamWaffles:来自远程 URL,它将打开/关闭我面包板上的一系列 LED。
  • 我无法理解您如何需要 10k 个字符来控制某些 LED。正如 Basile 所说,AVR 没有足够的 RAM,因此您需要将您的字符串分成块并将它们发送到例如 1KB 的部分中。
  • 最终它将控制圣诞灯。如果一首歌曲是 300 节拍(大约 2-3 分钟),那么使用我的代码将是大约 5,000 个字符...

标签: c++ c arduino


【解决方案1】:

使用 2 KB 的 RAM,您可以拥有不超过 2000 字节的数据(实际上,由于堆栈和全局空间,可能只有 1500 字节)。

如果您需要在内存中处理 20 KB 的数据,请购买更大的微控制器......(或对您的 Arduino 进行编程以将数据传输到您的 PC 以进行处理)。

【讨论】:

  • 无法将其发送到我的计算机。它将使用 arduino uno 和以太网屏蔽远程运行。我可以扩展我的记忆吗?
  • @phpnerd211 这是 XY 问题的一个很好的候选;解决根本原因,而不是破解您的问题的解决方案。您应该从计算机通过网络以大约 1KB 数据包的形式发送数据。
  • @phpnerd211:您必须在获取字节时解析和解释字节,除非绝对必须,否则不要将它们保存在内存中。实际上,您的代码似乎一次只在内存中保留一行(完美!),因此 RAM 应该不是问题。尽管您可能希望将包含currentLine 的行放入if (!readingData) {,这样可以节省更多内存(和时间)。
  • @Mooing Duck:哇,我不敢相信我没有想到这一点。现在一切正常,花花公子!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2022-11-10
  • 2023-03-08
相关资源
最近更新 更多