0

我正在开发一个 arduino 项目,该项目在服务器上发出 http 请求并读取 http 页面内容。在循环中我有一个功能:

String eventValue = check_for_event(); 

String check_for_event(){
if (client.connect(server, 80)) {
    client.print("GET /check_for_event.php?q=");
    client.print(class_code);
    client.println(" HTTP/1.0");
    client.println();

    return readPage(); 

} else{ return "704"; }
}

String readPage(){
  stringPos = 0;
  memset( &inString, 0, 32 );
  int print_flag=0;
  while(true){

    if (client.available()) {
      char c = client.read();
      if (c == '<' ) { 
        startRead = true; 
      }else if(startRead){
        if(c != '>'){ 
          inString[stringPos] = c;
          stringPos ++;
        }else{
          startRead = false;
          client.stop();
          client.flush();
          print_flag=1;
          return inString;
        }

      }
    }

  }
  if(print_flag==0){return "804";}
}

这是我的代码的一部分,我每 3 秒调用一次。它可以正常工作几个小时,但突然崩溃,我不明白为什么。我发现在 check_for_event 函数的某个地方崩溃了。

4

1 回答 1

0

很可能您的内存不足。由于您没有显示您的代码,因此很难确定确切的原因。要么你有内存泄漏,要么你只是溢出了你的内存。我建议检查接收到的 http 页面的大小是否变化,以及崩溃是否只发生在特定的大页面上。

恕我直言,只有 2k ram 的 Arduino 不太适合 http 处理。Raspi范围内的东西会更合适。

话虽如此,如果您想坚持使用 Arduino,您可能需要考虑使用更少内存的技术。首先是了解可用内存

接下来是停止为字符串常量浪费内存。如果这还不够——很可能——你必须仔细检查你的代码并对其进行大量优化。除非您受到严格的成本限制(例如,因为您为 1000 台设备设计)或者您的时间基本上是空闲的,否则切换到更强大的硬件是一个更好的主意。

于 2013-05-20T07:32:08.693 回答