我正在玩字符串SD card(當服務器連接不可用時觸發)。隨後它將傳感器值記錄到SD卡(在常規的loop()
函數中),一旦與服務器的連接變爲可用,它就通過UDP將其作爲數據包發送。Arduino內存泄漏(SD卡+字符串)
我似乎遇到了一旦輸入SD卡寫入部分時發生的一些相當大的內存泄漏,最終導致Arduino耗盡可用內存。
我正在玩字符串SD card(當服務器連接不可用時觸發)。隨後它將傳感器值記錄到SD卡(在常規的loop()
函數中),一旦與服務器的連接變爲可用,它就通過UDP將其作爲數據包發送。Arduino內存泄漏(SD卡+字符串)
我似乎遇到了一旦輸入SD卡寫入部分時發生的一些相當大的內存泄漏,最終導致Arduino耗盡可用內存。
好吧,我讀了這段代碼 - 如果你不打電話關閉()每打開的情況下你會有泄漏 - 只有一個文件對象(爲什麼我不知道) 。
這是一個有趣的代碼:
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對象的代碼,所以它是一個謎,但我希望你需要調用處理東西...也許dataFile?
這將在SD庫中, https://www.dropbox.com/sh/d74i76rngbsa76w/UdxTS_gNxd – 2012-07-27 15:25:38
感謝你,我也發現在我使用的其他庫中有一個巨大的錯誤,尤其是字符串錯誤,因爲arduino沒有自動垃圾收集功能,所以我被告知要在所有地方重寫,並使用它轉儲圖書館。 – 2012-07-27 17:59:02
c和C++沒有自動垃圾收集,因爲它們不是託管語言。 – Hogan 2012-07-27 18:12:30
你是怎麼確定你有內存泄漏的?我懷疑我可能有類似的問題,但我還沒有'證明'它。想知道你是如何得出你的結論的... – WildBill 2012-12-07 02:42:07
我使用了一段免費的Ram代碼,只是在我的代碼中經常打印它。發生的事情是減少到一個點然後墜毀。 – 2012-12-07 13:44:00
[http://pastebin.com/wUddCd8V](http://pastebin.com/wUddCd8V) – 2012-12-07 13:45:27