PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit dem Adressbereich



Kera
03.03.2006, 16:34
Ich habe leider ein sehr blödes Problem!

Wenn ich mein Programm im AVR Studio durchteste, und ich im Watch Fenster Variablen eingebe sehe ich ja die Adresse der Variable!!

Nun ist es so das ich einen ATMega 8535 verwende, der 512 Byte SRAM Speicher hat.

Wenn ich nun im AVR Studio bei einem Testlauf in ein Unterprogramm einsteige, wo ich lokale Variablen definiert habe, schreibt er mir bei der lokalen Variable einen Adressbereich hinein, der über den Adressbereichs meines Microcontrollers liegt!!!

Jetzt habe ich die Frage, ob das überhaupt etwas ausmacht, oder ob das nur im AVR Studio so ist??
Ich habe das Programm zwar schon ausgetestet mit meiner Platine, aber es macht einfach das Bild, als ob die lokalen Variablen in den Unterprogrammen einfach außerhalb des Adressbereichs wären!!!

Weiß irgendjemand einen Ausweg? Hängt das vielleicht mit dem Compiler zusammen?? Bin ratlos!!! :-k

SprinterSB
03.03.2006, 16:40
Der Compiler kann deinem ATmega8535 auch nicht mehr SRAM verpassen. Ansonsten mach GCC, was du ihm sagst ;-)

Bestenfalls mal Code posten oder schau mal ins asm, womöglich hast du da Kracher drin, die dir den gesamten SRAM wegfuttern.

p.s.: So nebenbei... Hier wird auch auf Fragen geantwortet, die in Farben verfasst sind, bei deren Anschauen man nicht blind wird...

Kera
06.03.2006, 20:40
Ha ha!!
Aber die Frage fällt wenigstens gleich auf!!!

Kera
07.03.2006, 08:27
Hi!!

Ich habe jetzt etwas neues probiert:
Ich habe beim Makefile den ATMEga 32 eingestellt, da dieser ja die gleiche Pinbelegung hat, nur das er mehr SRAM Speicher hat, nämlich 2k!!

Aber beim Simulator ist wieder das selbe, er legt die Adresse von lokalen Variablen in Unterprogrammen wieder Ausßerhalb des Speichers des Microcontroller ab!!

z.B: 2130

Warum ist das so???
Weiß das vielleicht jemand??

Oder hat jemand eine Ahnung wo man nachschauen kann? Ob man in irgendeinem File, welches der Compiler erstellt, nachschauen kann??

MFG

askazo
07.03.2006, 09:08
Keine Panik, Dein Compiler macht alles richtig und auch sonst ist alles ok.
Denn

1. 2kB sind nicht genau 2000 Bytes.
2. Das interne SRAM fängt nicht bei Adresse 0 an.

Schau Dir mal das Speicherlayout der Mega32 an (Datenblatt Seite 15)

Die Adressen 0x00 bis 0x60 sind mit den internen Registern des AVR belegt. Erst ab da geht der SRAM los. Die Größe beträgt 2048 Bytes, in Hex wären das 0x7FF. Die höchste Adresse des SRAMs ist also 0x60 + 0x7FF = 0x85F - also 2143 dezimal. Die Adresse 2130 ist also noch innerhalb des SRAMs.

Gruß,
askazo

Kera
07.03.2006, 12:58
Oh vielen dank!!!
Du hast recht gehabt!