Speicherende

Gast #48060
Lesenswert?
• ▲
▼
Hallo,
gibt es eine möglichkeit festzustellen, ob ein Programm in einem
AT90s8515 zur Laufzeit den kompletten Arbeitsspeicher (intern) belegt?
Also inklusive Stack.
Mein Programm zeigt nämlich komische Ausfallerscheinungen, wenn ich es
um genau eine Variable erweitere...
Ausfallerscheinungen in der hinsicht, dass z.b. andere Variablen
willkürlich überschrieben werden.

Wiess da jemand Rat ?

Gruß,
Andreas
Gast #48061
Lesenswert?
• ▲
▼
in C gibts sog. stack-end-marker für die jeweiligen stackbereiche, da
wird einfach ein string "stack_end" z.B. an das Ende des stacks
geschrieben. Verschwindet auch das "s" im Laufe der Simulation, hast
du ein stackproblem. Das kann man natürlich auch in Assembler machen,
man muss sich allerdings selbst um die letzte stackadresse (letzte
Variable+1) kümmern.
Bei dem von dir geschilderten Verhalten scheint mir genau das der Fall
zu sein.
Lösungsmöglichkeiten:
-kleinere Variablentypen nehmen, wenn möglich (bit statt char, int
statt long, ich habe sogar schon mal 24bit-Variablen benutzt)
-lokale Variablen verwenden, die nach Beendigung des UP in anderen
verwendet werden können, typischer Fall z.B. Schleifenzähler, da kann
in jedem UP diesselbe Variable bzw. Register verwendet werden
-Verschachtelungstiefe des Programms verringern

Bei den "normalen" Variablen kann es da eigentlich kein Problem
geben, da die einen festen Speicherplatz haben. Es sei denn, sie werden
indirekt adressiert und der pointer läuft aus dem Ruder.
Aber das wäre doch mal eine sinnvolle Erweiterung für AVR-Studio, wenn
man irgendwie die tiefste SP-Adresse sehen könnte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.