AVR Adressierung des internen SRAM

OP #2661316
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
Gast #2661326
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
OP #2661337
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
OP #2662098
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.