C代码或Arduino限制中的内存问题?

时间:2014-12-14 20:04:12

标签: c json rest memory arduino

我正在开发一个带有ArduinoYùn模块的项目。我目前正在尝试从Arduino创建JSON以返回。这个JSON的创建发生在嵌套的for循环中。我正在使用aJson Arduino库(https://github.com/interactive-matter/aJson)。

当我构建Arduino时,它第一次正确发送。当我在那之后进行REST调用时,我只得到一个空行\r\n(这很可能是HTTP响应头之后的空行)...

我不确定我是否在处理内存问题,或者是否还有其他问题。我很习惯使用面向目标的语言,我知道C,但是因为它没有垃圾收集释放内存,所以对我来说并不是那么清楚......

这是我创建和发送JSON的方法的代码:

void getAll(YunClient client) {
    aJsonObject *root, *object;
    root = aJson.createArray();

    int i = 0;    
    for(i; i < 4; i++) {
        int j = 0;
        for(j; j < 3; j++) {   
          aJson.addItemToArray(root, object = aJson.createObject());
          aJson.addNumberToObject(object, "test", 1);
          //should I do a free(object); here?
      }
    }       

  //headers
  //client.println("HTTP/1.1 200 OK");
  client.println("Status: 200");
  client.println("Content-Type: application/javascript");
  client.println("Access-Control-Allow-Origin: *");
  //client.print("\r\n");
  client.println();

  // Send feedback to client
  char* result = aJson.print(root);
  Serial.println(result);
  client.println(result);

  free(root);
  free(result);  
}

正如你所看到的,在嵌套for循环内部,我不确定我是否应该释放内存。

第一次进行REST调用时: enter image description here

我第二次得到这个(但我的Arduino没有堵塞/崩溃,其他功能继续工作,它仍然发送数据,它似乎是空的......): enter image description here

1 个答案:

答案 0 :(得分:0)

我不会将free用于aJson结构! 你怎么知道这些结构中有什么?查看图书馆文档,了解如何免费。

我在你链接的页面上找到了这个:

  

完成了吗?删除根(这会处理其他所有事情)。

     

aJson.deleteItem(root);

还有这个(因为你使用的是aJson列表):

  

列表很容易在aJson中处理,以创建一个你可以简单使用的列表   提供的API函数:

     

aJson.create<TYPE>Array(objects,24);

     

您只需传递相应类型的数组:char*[]int[]等   上。

     

aJSON不会对您创建事物的顺序做出任何假设   如上所述,您可以附加对象,然后将子项添加到   每个具有

的对象      

aJson.addItemToArray()

     

或用

删除它们      

aJson.deleteItemFromArray() - 也会删除对象,或   aJson.detachItemFromArray() - 没有释放内存

     

只要调用aJson.print(),它就会将结构呈现为文本。