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
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.
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
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
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
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.
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.