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
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.
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
Lokale Variablen werden doch, meiner Meinung nach, immer auf dem Stack angelegt, oder irre ich da? Gruß, Patrick...
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.