SD.h macht mein Programm kaputt? :-/

Hallo,

leider kann ich dieses Problem vllt nicht ausreichend schildern, weil ich selbst nicht ganz verstehe, was schief läuft...

Ich habe ein Programm, bei dem ich Daten vom PC per Serial empfange, auf einer SD-Karte in eine Textdatei schreibe, dort diese Daten wieder auslese und ausgebe.

Das Programm ist etwas umfangreicher, dazu gehört noch eine Library, in der ich relativ viele Infos hinterlegt habe.

An sich funktioniert das Programm gut, aber sobald ich die SD.h eingebunden habe verhält sich der Arduino, als hätte ich irgendwo etwas in Speicherbereiche hineingeschrieben, wo es nicht hingehört. Bytes werden verwurstelt und Daten sind unberechenbar verändert. Mir ist aufgefallen, dass sich das Problem bessert, wenn ich die SD.h eingebunden lasse und ich meiner eigenen Library weniger Daten, bzw KLEINERE Arrays hinterlege. Je größer mein Array in der Library ist, desto mehr spielt das Programm wieder verrückt. Auch ändern sich die Fehler, wenn ich zB den Datentyp einiger Variablen von long nach int ändere. Das klingt doch, als wäre es ein Speicherproblem? Ist die Lib evtl zu groß? Gibt es eine abgespecktere SD.h? Aber die Aussage "Binary sketch size: 18608 bytes (of a 32256 byte maximum)" Sollte doch bedeuten, dass alles im Lot ist... Oder ist vllt der Variablen-Speicher überfüllt? Ich meine das wären bei meinem Uno 2kB, aber ich selbst habe nicht mehr, als 1kB hinterlegt.

Ich weiß langsam nicht mehr weiter :frowning:
Gibt es etwas besonderes zu beachten, wenn ich diese Lib benutze? Wie kann ich herausfinden was da genau passiert?

Gruß
Metti

Wahrscheinlich brauchst Du zuviel RAM und der ATmega überschreibt Speicherbereiche.
Vieleicht könnte das helfen? FAQ Neuigkeiten und Probleme ab Arduino IDE 1.0 - #2 by uwefed - Deutsch - Arduino Forum

oder benutzt Du einen zu Index Außerhalb der Größe eines array's?

Grüße Uwe

Genau über diesen Post bin ich gerade auch gestolpert.

Index außerhalb der Arraygröße kann es nicht sein, ich halte mich weit vorne im Array auf und wenn ich das Array größer mache spinnt er wieder rum, ansonsten nicht.

Wenn ich das richtig verstehe eignet sich diese F()-Syntax nur für Strings, ich würde aber gerne mein ganzes Array dort lagern.

Ich habe mal hier geschaut:

Und ich kann so meine Arrays wohl auch im Flashspeicher lagern... aber wie komme ich da wieder an meine Daten ran?^^

Die Daten im Array sollen bis in alle Ewigkeit so bleiben, wie ich sie ursprünglich programmiert habe, deshalb denke ich, dass das eine ganz gute Idee ist, aber wenn ich sie so speichere: "PROGMEM char _breite[] = { 16,.........};" und normal wieder abrufen möchte scheinen sie nicht gefunden zu werden :-/

Brauche ich dafür spezielle Befehle?

€dit:

Hier habe ich eine echt gute Anleitung für Progmem gefunden... nur noch nicht genau das, was ich brauche... oder ich habs übersehen^^
http://deans-avr-tutorials.googlecode.com/svn/trunk/Progmem/Output/Progmem.pdf

€dit€dit:

Mit dem Befehl pgm_read_byte komme ich auch nicht weiter... egal wie, wenn ich soetwas schreibe: "pgm_read_byte(&myArray[10]) ;" Bekomme ich immer den Error "Ein Ausdruck wurde erwartet" :-/

€dit€dit€dit (und auch das letzte €dit):

Gut, man sollte sich nicht NUR auf IntelliSense verlassen. Es war zwar rot unterkringelt, aber trotzdem wohl nicht falsch!

Danke für den Hinweis, sollte sonst noch wer nen bischen ausführlich durch das Thema stöbern wollen ist ja oben wie gesagt ein guter Link hinterlegt.

Gruß Metti

F() und progmem können nur statische Variablen oder Texte speichen die im Moment des Kompilierens bereits definiert sind.
grüße Uwe