Ich arbeite gerade an einem Projekt für ein eingebettetes LED-Messsystem. Es verwendet ARM und Linux, und hat 64M Speicher und 1G Speicher. Bei der Messung soll es Daten in eine .csv-Datei schreiben. Ich habe es auf diese Weise gemacht:
- Erstellen/Öffnen einer Datei vor Beginn der Messung
- Wenn die Daten in der Messschleife fertig sind, speichern Sie sie in der Datei und gehen dann zur nächsten Messung über.
- Wenn der Benutzer die Messung beendet, wird die Datei geschlossen.
Aber wenn ich diese Funktion hinzufüge, läuft das Programm mehrere Stunden lang, und dann reagiert der Rechner auf nichts mehr (die Messung wird gestoppt, die Benutzeroberfläche wird weiterhin angezeigt, reagiert aber nicht mehr auf Aktionen usw.). Und die csv-Datei ist etwa 15 MB groß. Ohne diese Funktion kann das Gerät den ganzen Tag gut arbeiten. Ich habe darüber nachgedacht, vielleicht liegt es daran, dass der Speicher aufgebraucht ist. Ist es möglich, mit einem so kleinen Speicher eine Datei weiter zu schreiben? Oder sollte ich sie jedes Mal schließen, wenn ich mit dem Schreiben von Daten fertig bin? (In diesem Fall müsste ich die Datei sehr häufig öffnen/schließen, was unser System verlangsamen würde, was ich nicht gerne sehe) Ich entschuldige mich für mein schlechtes Englisch, vielleicht kann jemand es verstehen und mir helfen. Gott leuchtet Ihnen den Weg, danke Ihnen allen!
ps: Ich glaube, dass die Dateioperationen selbst korrekt sind.
den Code wie folgt:
std::ofstream out_put;
out_put.open(filePath, std::ofstream::out | std::ofstream::trunc);
while(!userStoped()){
doSomeMesuring();
for(int itemIndex = 0; itemIndex < itemCount; ++itemIndex){
out_put << ',' << itemName.toStdString() << ','
<< data->mdata.item[itemIndex].mvalue << ','
<< data->mdata.item[itemIndex].judge << std::endl;
}
}
out_put.close();