我正在尝试将字符串写入SD卡(在服务器连接不可用时触发)。然后,它会记录传感器值到SD卡中(在常规
似乎当进入SD卡写入部分时出现了一些相当大的内存泄漏,最终导致Arduino的可用内存耗尽。
loop()
函数内),一旦与服务器的连接恢复,它就会将其作为数据包通过UDP发送。似乎当进入SD卡写入部分时出现了一些相当大的内存泄漏,最终导致Arduino的可用内存耗尽。
loop()
函数内),一旦与服务器的连接恢复,它就会将其作为数据包通过UDP发送。好的,我看了那段代码——如果您没有为每一次打开调用close()函数,您将会有一个泄漏——只有一个文件对象(为什么我不知道)。
以下是有趣的代码:
void File::close() {
if (_file) {
_file->close();
free(_file);
_file = 0;
/* for debugging file open/close leaks
nfilecount--;
Serial.print("Deleted ");
Serial.println(nfilecount, DEC);
*/
}
}
他们似乎有一些不错的代码可以用来找到漏洞,也许你应该试试。
此外,只需将代码末尾更改为以下形式:
dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (SD.open("datalog.txt", FILE_WRITE))
{
dataFile.println(dataString);
// print to the serial port too:
Serial.println("data logged to SD");
}
// if the file isn't open, pop up an error:
else
{
Serial.println("File Error datalog.txt");
}
dataFile.close(); // always close after an open.
好的,您没有展示SD对象的代码,所以这是个谜,但我认为您需要在某些东西上调用dispose......也许是dataFile?