mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Memory debuggen aber andersrum


Autor: Mario Hirth (rocko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Ich wandere anscheinend irgendwo im meinem Programm über ein Array 
hinaus und schreibe wo hin, wo ich eigentlich nicht hin schreiben sollte 
(das musste ja mal passieren!).

Da ich weis welche Variable ich mir überschreibe, würde ich gerne wissen 
welche Variablen kurz VOR der entsprechenden Adresse im Speicher 
abgelegt sind um so einen groben Anhaltspunkt zu finden wo ich suchen 
muss.

Gibts hier eine Möglichkeit?

Im AVR Studio sehe ich vor der entsprechenden Adresse nur "00"en, damit 
kann ich keine Rückschlüsse ziehen wie die zugehörige Variable heisst. 
Da die meisten Arrayfunktionen in meinem Programm mit UART-Kommunikation 
zu tun hat, kann ich das auch nicht simulieren. (Initialisierung dauert 
in Realzeit schon 1-2 Sekunden!, dabei gibts Handshakes etc... über den 
UART).

vielen Dank


Rocko

ps.: Atmega 2561+WINAVR, Simulation mit AVR Studio 4

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mario Hirth schrieb:

> Da ich weis welche Variable ich mir überschreibe, würde ich gerne wissen
> welche Variablen kurz VOR der entsprechenden Adresse im Speicher
> abgelegt sind um so einen groben Anhaltspunkt zu finden wo ich suchen
> muss.
>

Ich kenn mich zwar mit dem AVR nicht aus, aber vermutlich kann dir dein 
Linker eine Symboltabelle erstellen.

Falls du gcc und konsorten verwendest, gibt es die Tools nm und objdump. 
Die sollten die von dir benotigeten Info ausgeben.

Gruss,
rweber

Autor: gast der gäste (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
map file?

Autor: Mario Hirth (rocko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

Wow: map file, symboltable alles da...
Ich hätte wohl mal die ganzen Files die beim Compilieren angelegt werden 
mal durchsehen sollen ;-)

Da ist eine Variable namens "tempstring" ein sehr verdächtiger Nachbar!

Vielen Dank für den Hinweis...

lg Rocko

Autor: Michael Haberler (mah)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest auch eine memory debugging library verwenden und das Array 
mit malloc() allokieren

solche libraries haben eine Funktion, die periodisch die Integrität der 
malloc() Strukturen (vor und hinter dem array) überprüft und abwirft, 
wenn da was daneben gegangen ist; ev kann man die Überprüfungsroutine 
auch aus einem Timer-Interrupt aufrufen.

zB das da: http://dmalloc.com/

habe das nie auf einem embedded System verwendet, sollte aber gehen 
(famous last words :-)

-Michael

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähnlicher Ansatz:

Building a user space library for dynamic memory analysis
http://www.embedded.com/design/opensource/218500483

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja dynamische Speicherverwaltung hat auf einem (so kleinen) 
Mikrokontroller nichts zu suchen

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, mit der dynamischen Speicherverwaltung sind wir von der 
Originalfrage abgewichen.

Andererseits: Ein Atmega2561 (8 kB RAM) wie beim OP oder Atmega128 (4 kB 
RAM) bei dem Embedded-Autor (http://code.google.com/p/uniboard/) ist ja 
nicht mehr soooo klein und wenn man an eine Nutzung von externem RAM 
(SD-RAM) denkt...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Simulator einen breakpoint bei Schreibzugriff auf die Speicherstelle 
setzen. Geht z.B. mit VMLAB.

Oliver

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.