AVR Adressierung des internen SRAM

#2661316
Lesenswert?

Hallo,

ich habe gerade mit einem Programm für einen ATmega8 zu tun, an dem ein 
paar kleine Modifikationen vorgenommen werden müssen. Dummerweise habe 
ich nur das Hex-Dump, muß mich mit dem Disassembler durch den Code 
wursteln. Das geht soweit auch, sieht weitestgehend logisch aus, nur an 
einer Stelle verstehe ich die Welt nicht mehr: Der Stackpointer wird im 
Programm auf die Adresse 4FFH initialisiert. Meines Wissens nach geht 
der SRAM des ATmega8 aber nur von 060H bis 45FH. Der Stack zeigt also in 
einen leeren Bereich. Im Simulator schmiert das Programm auch pünktlich 
am ersten RET-Befehl ab, da vom Stack nur Null zurückkommt. Dummerweise 
läuft die Software im echten System!!
Ist die Addressierung des ATMega8 vieleicht nicht vollständig aufgelöst 
und führt so zu Echos des SRAM im Adressbereich? Kennt jemand einen 
solchen Effekt? Gibt es vieleicht spezielle Varianten des m8 mit mehr 
SRAM?

vielen Dank

Ingo
#2662098
Lesenswert?

Hallo,

ich habe den Chip nochmal angeschaut - es ist ein ATmega8 16AU. Ich gebe 
zu, die Software sieht aus wie für einen ATmega88. In der von mir 
untersuchten Applikation steckt das Programm definitiv in einem ATmega8 
und funktioniert - obwohl es das eigentlich nicht dürfte. Also zur 
Erläuterung, nicht ich habe die Software da reingesteckt, das war der 
fernöstliche Hersteller des Gerätes.

MfG

Ingo
Persönliche Seite #2663547
Lesenswert?

Möglicherweise wird das RAM beim Adressieren einfach gespiegelt, d.h. 
die Adressen modulo 0x400 genommen.

0x4ff entspäche dann 0xff, weil der RAM bei 0x60 beginnt, bleiben dann 
0x9f = 159 bytes für den Stack.

Gibt es LDS/STS im Programm? Und sind die Adressen alle > 0xff?

Gibt es Compiler mit so einem RAM-Layout?

Anhand des Disassemblies sollte sich auch rausfinden lassen, welcher 
Compiler (falls überhaupt) am Werk war. Zumindest könnte ich ziemlich 
sicher sagen, ob es avr-gcc war oder nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren