wo ist ein struct abgelegt?

Hallo Miteinander,
kurze Frage: Ich habe ein Struct, das ziemlich viel Text enthält. Nun die Frage: bleibt dieser Text im Flash, oder wird der auch ins Ram kopiert?

Danke.
LG Stefan

Text ist immer im RAM wenn man nichts besonderes macht. Das hängt mit der Prozessorarchitektur zusammen. RAM und Flash sind streng getrennte Adressräume mit unterschiedlichen Datenbussen. Die Befehle um mit Daten im Flash umzugehen sind sehr limitiert. z.B. ein Byte lesen oder schreiben. Alle komplexeren Befehle können nur mit Daten im RAM umgehen. Also wird einfach alles dorthin kopiert. Die ganze PROGMEM-Geschichte umgeht das auch nur mit Hilfs-Makros und -Funktionen.

Wenn es ein konstantes struct ist, kannst Du es in den PROGMEM legen, sonst liegt es im RAM.

Gruß Tommy

Danke euch beiden.
Das könnte meine Probleme evt. erklären. Aufgrund seltsamen Verhaltens habe ich RAM Knappheit in verdacht.
Beim kompilieren wir zwar 'nur' 58% Ramverbrauch angezeigt. Aber wie hier ja schon öfters erwähnt wurde, wird da ja nicht alles, was zur Laufzeit noch zusätzlich an RAM benötigt wird, angezeigt.

Ich brauche die Texte nicht ins PROGMEM zu schieben, die Texte sind jetzt nur zu testzwecken im Programmcode, nachher, wenn dann alles mal soweit läuft, liegen sämtliche Texte in einem externen FRAM. Ich habe diese Texte erstmal von nem andern Sketch, der am Ende durch mein Sketch ersetzt wird, übernommen.
Ich schmeiss jetzt erstmal so viel Text wie es geht raus, und mache damit weiter.

LG Stefan

Lege Dir eine Liste mit den Texten daneben und nimm nur eine Nummer ins Programm.

Gruß Tommy

Ja, so ähnlich wird es nachher sein.
Die Texte werden auf einer LED - Matrix (224 x 8) animiert angezeigt.
Die Animationen, sowie auch ein Teil der Texte werden in einer Android-App erstellt und dann via Buethooth an den Controller der Matrix (ein Atmega 328P-AU) gesendet. Dieser transferiert die Daten in einen bestimmten bereich eines externen I2C-FRAM. Weiterhin liegen in einem weiteren Speicherblock einige fixe, fertig konfigurierte, immer zur verfügungstehenden, Animationen die mit ebenfals fix hinterlegten Texten versehen sind. Diese fixen Animationen können in der Android-App an beliebiger stelle in die Animation eingebunden, resp. von dieser beliebigen Stelle aus aufgerufen werden.
Im Sketch wird dan nur noch der ‘Animations-Katalog’ Zeile für Zeile eingelesen und auf der Matrix dargestellt.
Dazu kommen dann natürlich noch die Funktionen, dienachschauen, ob was übers Blutooth reingekommt, und die bei Eingang eines Neuen Animations-Kataloges, diesen ins FRAM transferieren, sowie Funktionen, die, wenn eine entsprechende Message über I2C vom 2. Controler, der einen weiteren Teil der Anlage steuert, eintrifft, eine entsprechende Animation dazwischen schiebt, die jedoch nur einmalig ausgeführt wird.

Ist ne komplexere Sache, aber ich komme voran.

LG Stefan

Deltaflyer:
Aufgrund seltsamen Verhaltens habe ich RAM Knappheit in verdacht.

Du könntest es mal mit MemoryFree versuchen.

Deltaflyer:
Dieser transferiert die Daten in einen bestimmten bereich eines externen I2C-FRAM.

Du kennst meine I2C-FRAM-Lib (bis hinten durchscrollen)?

Gruß Tommy

Danke agmue , werde ich mir für die Zukunft installieren. Denn so wie sich dasseltsame verhalten bemerkbar macht, zum Beispiel, das der Fehler ‘Wandert’ je nachdem. wo ich dann eine Debug-Ausgabe auf die Serielle mache, würde mir Memory-Free wohl ne ähnliche Vermutung um die Ohren hauen. Ich gehe jetzt erstmal für 2-3 Stunden schlafen, dann schmeisse ich dieses zuviel an test - Text raus, und sehe zu, dass ich diese 2 Funktionen sauber programmiert bekomme. Dann dürfte das passen. Bin jetz auch schon wieder über 60 Stunden wach, ich denke, wenn ich etwas geschlafen habe, bekomme ich das dann in den Griff.

Aber Danke für den Tipp, ich hab’s mir runtergeladen. Werde ich mir sicher auch bald mal ansehen.

LG Stefan

Hallo Tommy,
glaube mal hirer im Forum was von gelesen zu haben, glaub aber, ich hab sie mir noch nicht geholt.
Ich schaue gleich noch rasch nach, aber mich damit auseinandersetzen tue ich, nachdem ich endlich etwas geschlafen habe. bin schon über 60 Stunden wach, und mein Hirn ist nicht mehr ganz so fit.

Danke Tommy.

LG Stefan

Dann geh schlafen. Das ist nicht gesund.

Gruß Tommy

Hallo Tommy,
Hab mir die fram_2.h jetzt fertiggestellt. Den Beispielcode für 64k hatte ich anscheinend schon, die .h allerdings nicht.

Abe anschauen wede ich mir das in frühestens 3 Stunden, jetzt gehe ich schlafen.

Gute Nacht.
Und nochmals vielen Dank.
LG Stefan

Ja Tommy, ich weiss dass schlafen nicht gesund ist, darum tue ich das ja auch so wenig wie möglich ;D

LG Stefan

Falsch: Nicht schlafen ist nicht gesund. Und dauernd > 8 Stunden arbeiten erhöht exponentiell die Fehlerquote.
Nach 60 Stunden geht der fehlerfreie Code doch gegen 0 Zeilen pro Stunde.

Gruß Tommy

wenn dann alles mal soweit läuft, liegen sämtliche Texte in einem externen FRAM

Also brauchst du sowieso einen Spezialzugriff auf die Texte. Diese Zugriffsfunktion kannst du ja auch (zumindest jetzt testweise) auf PROGMEM zugreifen lassen und später eventuell umschreiben.