INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Maximale Dateigröße
04.04.2014, 22:27 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2014 22:28 von maximi1111.)
Beitrag #1
Maximale Dateigröße
Hi,

in meinem aktuellen Projekt verwende ich ein SD-Modul und einen Arduino Mega um ein paar Messdaten zu speichern.
Gespeichert werden die Werte in einer Textdatei, was auch eigentlich ohne Probleme klappt. Allerdings werden nach einer gewissen Zeit keine Daten mehr geschrieben.
Jetzt habe ich die Vermutung, dass die Textdatei vielleicht zu groß wird (knapp 4,5 MB).
Gibt es eine maximale Dateigröße, die der Arduino verarbeiten kann?

Vielen Dank für eure Hilfe.

Grüße
Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2014, 11:02 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2014 11:02 von rkuehle.)
Beitrag #2
RE: Maximale Dateigröße
Hallo maximi,

da die SD - Lib (die benutzt du doch?) auf verschiedene FAT - Libs aufsetzen kann, wäre es gut wenn man mal den Code sehen würde inkl. Hinweis auf die Quelle der Libraries. Weiterhin kommt es darauf an, wie du die Daten schreibst. Wenn du die Datei beim schreiben vorher sequentiell durchgehst, kann es schon passieren, dass das zu lange dauert.
Wie gesagt, Code wäre gut.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2014, 12:31
Beitrag #3
RE: Maximale Dateigröße
Hallo,

da der gesamte Code ein wenig komplizierter ist, poste ich mal nur die entsprechenden und relevanten Stellen.

Verwenden tue ich die Standard-SD-Library.

Code:
//SD Library einbinden
#include <SD.h>

Die zu speichernden Daten werden wie folgt per Timer zwischengespeichert.

Code:
//Typ der Warteschlange festlegen
struct stcEvent {
                  unsigned long iEventTime;
                  char iEventType;
                  short iEventData;
                  boolean iEventStatus;
                };

Das Schreiben der Daten auf die SD-Karte erfolgt dann wie folgt:

Code:
// Sende die Daten    
      File dataFile = SD.open("datalog.txt", FILE_WRITE);
      dataFile.print(stclTemp.iEventType,BIN);
      dataFile.print(",");
      dataFile.print(stclTemp.iEventTime,BIN);
      dataFile.print(",");
      dataFile.print(stclTemp.iEventData,BIN);
      dataFile.print(",");
      dataFile.print(Fehler,BIN);
      dataFile.println();
      dataFile.close();

Die SD-Karte ist 8 GB groß und somit als FAT 32 formatiert.

Vielen Dank.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2014, 17:34
Beitrag #4
RE: Maximale Dateigröße
hallo maximi,

die SD.Lib ist bekannt dafür, dass sie bei zu wenig verfügbarem SRAM Fehler bringt. Der sollte nicht unter 500 byte sinken. Test geht zB. so:
Code:
int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
// Aufruf zB: Serial.println(freeRam())
Gemeint ist der Variablenspeicher, nicht der Speicher für den Programmcode !!!
Den Aufruf könnte man zB. nach dem Close ausführen lassen.
Sicher dass nicht zwischendurch ein open oder close ohne das jeweilige Gegenstück außerhalb deines Codesnippets stattfindet?

Grüße RK

PS: Ich glaube nicht wirklich dass es ein Größenproblem der Datei ist.

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2014, 22:02
Beitrag #5
RE: Maximale Dateigröße
(05.04.2014 17:34)rkuehle schrieb:  hallo maximi,

die SD.Lib ist bekannt dafür, dass sie bei zu wenig verfügbarem SRAM Fehler bringt. Der sollte nicht unter 500 byte sinken. Test geht zB. so:
Code:
int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
// Aufruf zB: Serial.println(freeRam())
Gemeint ist der Variablenspeicher, nicht der Speicher für den Programmcode !!!
Den Aufruf könnte man zB. nach dem Close ausführen lassen.
Sicher dass nicht zwischendurch ein open oder close ohne das jeweilige Gegenstück außerhalb deines Codesnippets stattfindet?

Grüße RK

PS: Ich glaube nicht wirklich dass es ein Größenproblem der Datei ist.

Hi rk,
ah...coole Routine, hab ich gleich mal getestet....funzt.
Mercie fürs posten
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2014, 15:09
Beitrag #6
RE: Maximale Dateigröße
Hallo Ricardo,

vielen Dank für deinen Tipp. Habe deine Routine mal eingebaut und tatsächlich wurde nur eine 417 ausgespuckt. Heißt wahrscheinlich, dass nur 417 KB frei waren, oder?!?

Sehe auch gerade, dass ich einen wichtigen Teil des Codes vergessen habe.
Code:
//Länge der Warteschlange festlegen
struct stcEvent stcEventQueue[NUM_OF_EVENTS];
NUM_OF_EVENTS waren dabei 800.
Wenn ich es richtig ausgerechnet habe, dann müsste allein die Warteschlnge 6400 Byte groß sein. Dazu noch ein paar weitere Variablen und der SRAM ist wirklich ziemlich voll.
Habe die Länge der Warteschlange jetzt mal auf 700 gekürzt und theoretisch sollten jetzt rund 1000 Byte frei sein.
Starte gerade mal einen Dauerlauf und melde mich dann nocheinmal, wenn ich etwas Neues habe.

Auf jeden Fall schon einmal besten Dank.

Gruß
Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2014, 16:57
Beitrag #7
RE: Maximale Dateigröße
Habe es jetzt mal gut zwei Stunden durchlaufen lassen und es scheint keine Probleme mehr zu geben. Zumindest war ich jetzt schon bei einer 8,5 MB großen Datei und die Aufzeichnung lief noch ohne Probleme.

Aber vielleicht mal noch eine weitere Frage zu dem Thema:
Gibt es eine maximale Größe, die duch den Befehl "dataFile.print" zwischengespeichert werden kann, bevor das tatsächliche Schreiben mit "dataFile.close" durchgeführt wird?

Vielen Dank und beste Grüße
Max
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2014, 19:46
Beitrag #8
RE: Maximale Dateigröße
(06.04.2014 16:57)maximi1111 schrieb:  ............. eine weitere Frage zu dem Thema:
Gibt es eine maximale Größe, die duch den Befehl "dataFile.print" zwischengespeichert werden kann, bevor das tatsächliche Schreiben mit "dataFile.close" durchgeführt wird?

Vielen Dank und beste Grüße
Max

Nun ein Mega2560 hat 8KByte RAM auf dem Chip. Wenn man bedenkt was Ricardo mit den 500 Byte geschrieben hat die für die SD Lib frei sein sollten dann wird das wohl die Puffergröße sein wenn eh nicht sofort auf die Karte geschrieben wird.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste