Schau mal da, vielleicht kannst du da Weisheiten entnehmen.
https://www.roboternetz.de/wissen/in..._RAM-Verbrauch
Hi,
bisher habe ich mich relativ wenig um die Speicherverwaltung in meinem ATMega 128 gekümmert, da der Platz für Variablen, Heap und Stack immer ausgereicht hatte. Nun war aber der Fall eingetreten, dass der Stack in den Variablenbereich hinein gelaufen ist. Somit gibt es jetzt Handlungsbedarf.
Habe die Daten jetzt noch mal soweit zusammengekürzt, dass ich bei einem SRAM Start von 256 auf einen Heapstart von 2370 komme. der Stackpointer steht aber nach Programmstart schon bei 2531, was bei 4096Byte SRAM doch nur bedeuten kann, dass der Stack nicht ganz am Ende beginnt.
Nun meine Frage. Warum steht der Stack mitten im SRAM und kann ich ihn nach hinten verschieben?
Ich verwende den avr-gcc zum kompilieren.
Danke
sast
雅思特史特芬
开发及研究
Schau mal da, vielleicht kannst du da Weisheiten entnehmen.
https://www.roboternetz.de/wissen/in..._RAM-Verbrauch
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Sehr viel wahrscheinlicher ist, dass entwederZitat von sast
A) du größere lokale Variablen in main hast, oder
B) deine Methode zum ermitteln der aktuellen Stackposition fehlerhaft ist.
MfG
Stefan
Danke erst mal für die Antworten
@PicNick
genau mit diesen Methoden ermittle ich mir den RAM-Verbrauch
@sternst
zu B) siehe oben
zu A) was meinst du mit größere lokale Variablen in main? Wie gesagt sind bereits 2370-256=2114 Byte in .data
Hab mir den Bereich hinter dem Stack mal angesehen. Da stehen dann Strings drin, die ich beim initialisieren meines Touchpanels verwende. So als ob der Controller damit arbeitet. Weiß leider nicht ob das so korrekt ist. Ich hatte das so verstanden, dass der Stack am Ende des SRAM beginnen sollte und in Richtung Heap wächst.
sast
雅思特史特芬
开发及研究
Wenn du nicht weißt, was eine lokale Variable ist, oder dass diese nicht im Data-Segment stehen, ist das ja schon mal kein gutes Zeichen. Poste doch mal den Code von main.Zitat von sast
MfG
Stefan
Hi Stefan,
den Code von main kann ich leider nicht posten.
Ich weiß schon was lokale Variablen sind. Das bezog sich auch eher auf dein "größere".
Und nein, ich wußte bisher nicht, das die Variablen von main nicht im data Segment stehen. Wo stehen die denn dann?
EDIT: Oder anders gefragt was steht denn dann im Data Segment, denn wenn ich zum Beispiel Datentypen in Strukturen von 16 bit auf 8 bit gekürzt habe nahm der Speicherbedarf im SRAM ab.
Hab nochmal in dem Link von PicNick gestöbert und verstehe jetzt, glaube ich, worauf du hinaus willst. Die main ist auch nur eine Funktion und wird also im Stack nicht anders behandelt.
sast
雅思特史特芬
开发及研究
Hi, sast,
in Deinem subdirectory "default" stehen so Dateien wie *.map und *.lls. Erstere dürfte für Dich wohl sehr interessant sein - informativ sind die beiden IMMER!
Ciao sagt der JoeamBerg
Hi Joe,
ja da bin ich schon dran. Danke!
Ist vielleicht ganz gut das mal ein Ausreißer aufgetreten ist, dann ist man gezwungen sich genauer mit den Eigenheiten von µC und Compiler zu beschäftigen. Am Rechner kann man ja heutzutage reinmeiseln was man will, da sind immer noch Ressourcen da. (Außer man gibt den Speicher nicht wieder frei ).
Hab jetzt mal ein paar structs aus der main genommen und siehe ist zwar data zu 92% voll aber der Stack bleibt viel kleiner. Dank an dich Stefan und an PicNick für den Anschubser.
sast
雅思特史特芬
开发及研究
Und beschäftige dich mal mit dem Thema "Strings im Flash". Sieht nämlich für mich so aus, als ob du das meiste deines SRAM mit Strings verschwendest, die dort gar nicht zu stehen brauchen (egal ob nun Stack oder Data).Hab mir den Bereich hinter dem Stack mal angesehen. Da stehen dann Strings drin, die ich beim initialisieren meines Touchpanels verwende.
MfG
Stefan
du meinst sicher die progmem geschichte, da bin ich auch dran
sast
雅思特史特芬
开发及研究
Lesezeichen