logFile.close()

Arduino specifieke Software
Berichten: 15
Geregistreerd: 21 Feb 2013, 21:55

logFile.close()

Berichtdoor logger » 25 Feb 2013, 10:10

Hallo

ik gebruik de SD kaart om loggings te saven, nu is mijn vraag moet je altijd de file afsluiten ??

normaal open ik de file SD.open..... (om 00:00h) daarna schrijf in data, en als dat gereed is close de file logFile.close() (om 23:55h)

Maar als ik de arduino reset, of als ik de power erafhaal wordt er GEEN logFile.close() gegeven
Kan de file dan beschadig raken ??? of de pointer naar de laatst geschreven karakter missen , onthoud de file altijd de plek waar hij de data het laatst geschreven heeft ???

Ik heb dit een paar keer geprobeerd , en nog geen problemen ondervonden . Kan het zijn dat er een andere libery dit afsluiten regeld? of is de SD kaart daar voor beschermd ??

Stel als i beschardig raakt is er een instructie voor om dit te controleren

gegroet



geetings

Advertisement

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: logFile.close()

Berichtdoor astrofrostbyte » 25 Feb 2013, 11:11

Das een goede vraag , eigenlijk ook nooit bij stilgestaan. Ik denk dat het niet veel uitmaakt. Wat doet de file.close() ?, volgens mij schrijft hij geen extra data, ik denk dat hij alleen de filepointers ed. vrijgeeft.
Je zou eens in de Library kunnen kijken naar de .close() methode , ik denk dat dat wel veel info geeft.

Code: Alles selecteren
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);
    */
  }
}
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 27
Geregistreerd: 23 Feb 2013, 12:07

Re: logFile.close()

Berichtdoor walker » 25 Feb 2013, 20:18

Als je data naar een file schrijft wordt deze data eerst in een buffer(RAM geheugen) opgeslagen, eerst als de buffer vol is wordt de buffer inhoud aan de file toegevoegd. Alleen als de functie flush aangeroepen wordt de data in het niet volle buffer aan de file toegevoegd en met de functie close. Tevens wordt bij close de datum en tijd geupdate.
Als het systeem gereset of uitgeschakeld wordt, voordat flush of close aangeroepen wordt, bestaat er de kans dat er data verloren gaat. Het is dus veiliger om regel matig fush aan te roepen en de file later ook te sluiten.

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: logFile.close()

Berichtdoor astrofrostbyte » 25 Feb 2013, 20:50

Ja je hebt gelijk, staat eigenlijk ook gewoon op de Arduino.cc website , beetje verborgen.
http://arduino.cc/en/Reference/SDCardNotes onder kopje "Opening/Closing files"

Vraag me af waarom deze methode gekozen is?, voor de gebruiker is het toch logischer dat als hij een write doet dat data dan echt op het kaartje gaat.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Berichten: 15
Geregistreerd: 21 Feb 2013, 21:55

Re: logFile.close()

Berichtdoor logger » 25 Feb 2013, 23:02

ok

Opening/Closing files
When you use file.write(), it doesn't write to the card until you flush() or close(). Whenever you open a file, be sure to close it to save your data.

flush
Ensures that any bytes written to the file are physically saved to the SD card. This is done automatically when the file is closed.

Een flush doe ik regelmatig om de 5min heb ik nieuw data , en dan schrijf ik het naar SD en eindig altijd met flush,
maar het zou het beste zijn om daarna ook gelijk de file af te sluiten , als ik goed begrijp (close ipv flush dus)??

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten