www.mikrocontroller.net

Forum: Compiler & IDEs Watch von lokalen Variablen, die im RAM gehalten werden


Autor: Jens Gerdes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze:
- AVR Studio 4.08 Build 310
- WINAVR 20030913 (letzte Version)

Lokale Variablen, die nicht in Registern gehalten werden, sondern im
SRAM stehen, werden im Watch-Fenster des AVRStudio mit 'invalid
location' angezeigt, da die Adresse offenbar eine negative
Vorzeichenerweiterung bekommen hat (0xFFFFD6 anstatt 0x00D6).
Ich benutze den MFile Makefile Generator. Mache ich noch etwas falsch,
oder hat der EXTCOFF Konverter noch einen Fehler?

Gruss
Jens

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der extcoff-Konverter hat ganz sicher mehr als nur noch einen Fehler
;-), aber einen solchen sollte er nicht haben.  Du kannst Dir die
Debug-Infos des COFF-Files mit avr-objdump -g ansehen.  Wenn die
Adressen dort korrekt sind, dann würde ich den Fehler im AVR Studio
vermuten.

Autor: Christian Specker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein ähnliches problem bei mir, seltsamerweise scheint kein
Anderer dies bis dato bemerkt zu haben. Mein source sieht
folgendermassen aus:

int main(void)
{
    unsigned char ucTest;

    do
    {
        CalcIt(&ucTest);
        ShowIt(ucTest);
    }
    while (1);

    return(0);
}

Das Avr-Studio meldet für die Variable ucTest "Invalid location" mit
dem gleichen Verhalten, das J. Gerdes beschreibt. Die Variable wird
reell am Ende(!) des rams abgelegt; avr-objdump -g zeigt, das an dieser
Stelle der Stack liegen soll.
Alle Variablen, die Global deklariert werden belegen im Gegensatz
hierzu Ram Speicher der zu beginn des SRAM allokiert wird.
Das Makefile ist das Standard-Makefile der demos, die dem WinAVR
beiliegen, Controller ist der 90s2313. Ich benutze das AVR-Studio
Version 4.07 und 4.08.

Schade ist, daß sich das jetzt nur noch über das Memwatch-Fenster
debuggen lässt, in größeren Anwendungen wird das jedoch nicht möglich
sein.

@Jörg: IMHO ist das AVR-Studio schuld - wenn kann ich bei Atmel
anschreiben (PM ?).

@µC.net: Gibt es Lösungen/Ansätze ?

Gruß,
Christian

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lokale Variablen werden doch, meiner Meinung nach, immer auf dem Stack
angelegt, oder irre ich da?

Gruß,
Patrick...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, Du irrst hier nicht.  Die Variable liegt auf dem Stack und damit
,,am Ende des RAMs, dort, wo eigentlich der Stack liegen sollte''.
;-)

Die Offsets zum Stackframe sind im COFF-File wohl richtig eingetragen,
allerdings vermute ich mal, daß an dieser Stelle die verschiedenen
ABIs, die die einzelnen Compiler benutzen, einfach mal dazu führen,
daß AVR Studio mit den Stack Frames, die GCC produziert, nicht
klarkommt.  Es wäre in der Tat einen Report an Atmel wert.  Die via
GCC und avr-objcopy erzeugten COFF-Files tragen eine eindeutige
Markierung, so daß AVR Studio sich darauf einstellen könnte, die GCC
Frames zu dekodieren.

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.