AVR-GCC Inline Assembler Problem

Gast #2593798
Hallo Leute,

Ich hoffe es kann mir jemand bei meinem Problem helfen.

Ich möchte in meinem C-Source eine Assembler-Zeile mit einem CALL auf 
eine bestimmte Adresse.

zB       asm volatile("call 0x0A16":);

Das Problem ist, dass mir der Compiler nicht diesen Sprungbefehl korrekt 
einbinden tut. Anstatt auf 0x0A16 zu springen, will er auf 0x050B.

Was mache ich falsch?


Danke gleich mal vorweg.
Gast #2593857
0x0A16 ist eine Byte-Adresse und 0x050B ist die dazugehörige 
Word-Adresse (gerade die Hälfte). Es ist korrekt, die Byteadresse beim 
CALL anzugeben.

Bei der Anzeige im Debugger kann es sein, dass die Word-Adresse 
angezeigt wird, weil der Flash wortweise organisiert ist.

Also zuerst z.B. durch Disassemblieren prüfen, welcher Code bei 
Word:0x050B liegt. Das ist möglicherweise der gleiche Code wie an 
Byte:0x0A16. Ein gutes Gefühl für die Anzeige bekommt man, wenn man sich 
die Interruptvektortabelle ab 0x0000 mal ansieht. Dann wird klar, ob die 
Adressen in +1 Schritten hochzählen oder in +2 Schritten. Man kann sich 
auch die <projekt>.LSS Datei des AVR-GCC mit dem ASM-C-Mix ansehen.

Wenn nicht, dann ist zu prüfen, wie du den Code an die Byte:0x0A16 
Adresse geschafft hast und ob er wirklich dort gelandet ist. Wenn du 
beim Code-Hochladen an Word:0x0A16 geschrieben hast, liegt dein Code bei 
Byte:0x142C
Gast #2593969
Krapao schrieb:
> 0x0A16 ist eine Byte-Adresse und 0x050B ist die dazugehörige
> Word-Adresse (gerade die Hälfte). Es ist korrekt, die Byteadresse beim
> CALL anzugeben.

Wer dadurch verwirrt ist, sollte eigentlich grundsätzlich überhaupt 
nicht per inline-Assmebler im C-Code herumspringen. Da sollte man schon 
wissen, was man da tut.

Oliver

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.