Guten Abend,
vielleicht hat das ja schon mal jemand erlebt:
Ich habe ein relativ großes Programm für einen Arduino UNO (benutze einen Nachbau von Miuzei) geschrieben (ich bin kein Programmierer und bastle mich so durch). Weil unübersichtlich habe ich bestimmte Teile in Tabs ausgelagert und rufe die dortigen Funktionen aus dem Haupt-Tab auf. Auf ein mal gingen dann nach dem Überspielen Funktionen nicht mehr, obwohl ich daran nicht gearbeitet hatte. Nach einigem hin und her kann ich jetzt nachstellen, dass ab und zu durch das Einfügen völlig harmloser Zeilen (z.B. eines Serial.print oder eine unbenutzte leere Variable) keine Werte mehr an eine auszurufende wesentliche Funktion übergeben werden.
Gibt es da irgendwo ein Zeilenlimit da ich nicht kenne oder sonstige Limitationen? Die Speicherangabe in der IDE sagt mir eigentlich, dass ich noch ausreichend Speicher habe.
verzweifelte Grüße
Wolf
Schau dir einfach mal die Fehlermeldungen (Warnungen) in der IDE an, meist findest du da eine Erklärung.
Wenn nicht, solltest du den Sketch hier posten.
Eine Begrenzung, wie du schreibst, ist mir nicht bekannt.
Stichwort Vorwärtsdeklaration, wenn die Tabs nicht so benannt sind, dass sie beim kompilieren auch so abgearbeitet werden, dass die jeweilige Funktion gefunden wird.
Ansonsten wie immer: Zeige Deinen Sketch.
Wenn Du ein Archiv packst, ist alles drin und Du kannst es hier passend anhängen.
Es könnte zuwenig freier RAM Speicher sein.
Serial.print("test"); verbraucht RAM.
mit
Serial.print(F("text")); wird das verhindert.
Grüße Uwe
Aktiviere die Ausgabe aller Warnungen beim Kompilieren.
bereinige alle Warnings
Und wenn das erledigt ist und es noch immer ein eigenartiges verhalten gibt, kannst du den ganzen Sketch in ein ZIP packen und hier posten.
Solltest du irgendwelche Libraries einbinden, schreib neben jedem include ein Kommentar welche Version du genau verwendest bzw. wie die Library exakt im Library Manager heißt.
Dann kann man sich das ansehen.
Man man man, ihr seid echt schnell. Und ich bin echt deppert. Wald - Bäume und so.
Klar ists der RAM. Hab den mit
int freeRam ()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
ausgelesen und das ist schon grenzwertig.
Allerdings @uwefed : Die Nutzung des "Serial.print(F("text"));"sorgt bei mir nicht für weniger RAM verbrauch. Es wird eher etwas mehr. Auch funktioniert das nicht bei "Serial.println(F("text"));". Hast du da einen Tipp? (Außer: Sparen...)
Vielen Dank an alle, die mir den Nebel von den Augen gewischt haben....
Schönes WE!
Wolf
Was genau heißt das.
Ich habe da bisher noch keine Probleme oder Nichtfunktion festgestellt.
Na ja wen der TO nur vier Buchstaben zum Testen nutzt bringt das nichts.
Mehr im Sketch einfügen kostet doch Arbeit.
Ich vermute, dass das F-Macro für diesen kleinen Text bei der zu hohen Speicherauslastung auch nichts mehr ausmacht.
Ich hatte da mal eine Speicheranalyse gemacht.
Auch die Beiträge davor in dem Thread könnten interessant sein.
Gruß Tommy
Auch @Tommy56
Er schreibt aber, es funktioniert nicht. Da verstehe ich was anderes darunter. Und das möchte er doch mal beschreiben.
Ich hab das gefunden:
Grüße Uwe
Da ist der Test von @combie interessant:
Also bei nur einem kurzen F-Text steigt die RAM-Belegung erst mal.
Gruß Tommy
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.