- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: ATMega128 Stack Initialisierung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502

    ATMega128 Stack Initialisierung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

    雅思特史特芬
    开发及研究

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    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.

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672

    Re: ATMega128 Stack Initialisierung

    Zitat Zitat von sast
    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.
    Sehr viel wahrscheinlicher ist, dass entweder
    A) du größere lokale Variablen in main hast, oder
    B) deine Methode zum ermitteln der aktuellen Stackposition fehlerhaft ist.
    MfG
    Stefan

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    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

    雅思特史特芬
    开发及研究

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von sast
    was meinst du mit größere lokale Variablen in main?Wie gesagt sind bereits 2370-256=2114 Byte in .data
    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.
    MfG
    Stefan

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    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

    雅思特史特芬
    开发及研究

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.678
    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

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    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

    雅思特史特芬
    开发及研究

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Hab mir den Bereich hinter dem Stack mal angesehen. Da stehen dann Strings drin, die ich beim initialisieren meines Touchpanels verwende.
    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).
    MfG
    Stefan

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    du meinst sicher die progmem geschichte, da bin ich auch dran

    sast

    雅思特史特芬
    开发及研究

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test