Forum: Mikrocontroller und Digitale Elektronik AVR Adressierung des internen SRAM


von Ingo G. (ingo12)


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

von Thomas E. (thomase)


Lesenswert?

Ingo G. schrieb:
> Kennt jemand einen solchen Effekt?
Na klar.
Wenn man einen Code hat, der nicht für den Atmega8 compiliert ist.
SP auf 0x4ff deutet auf Atmega88 hin. RAM von 0x100 - 0x4ff.

mfg.

von spess53 (Gast)


Lesenswert?

Hi

>Der Stackpointer wird im
>Programm auf die Adresse 4FFH initialisiert. Meines Wissens nach geht
>der SRAM des ATmega8 aber nur von 060H bis 45FH.

Bist du sicher, das das Programm nicht für einen ATMega88 ist?

MfG Spess

von Ingo G. (ingo12)


Lesenswert?

Hallo,

danke für die schnellen Antworten.

wenn der mega8 und der mega88 eine unterschiedliche Device-Signatur beim 
auslesen haben, dann ist es definitiv ein m8, aber ich werde heute abend 
noch mal genau schauen.

Gruß

Ingo

von Ingo G. (ingo12)


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

von Johann L. (gjlayde) Benutzerseite


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.

von MWS (Gast)


Lesenswert?

Auf welche Adresse zeigt der Resetvektor ?

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
Noch kein Account? Hier anmelden.