Inline Assembler Problem

Gast #693084
Lesenswert?
• ▲
▼
Hallo Inline Experten,

ich möchte die Adresse einer Variable, welche in einem C Modul definiert 
ist, in das X Register eines AVR laden, wie geht dass, habe leider 
nichts gefunden.

Beispiel:

Modul Main.c

...

unisgned char bTest;

...

Assembler soll folgendes erledigen:
...
XH = &bTest(HIGH) ( wie geht dass Richtig ??? )
XL = &bTest(HIGH) ( wie geht dass Richtig ??? )
...


danke
Gast #693097
Lesenswert?
• ▲
▼
hallo, ok ich versuchs nochmal,

ich möchte ein altes Projekt von NEC nach AVR portieren, welches Teils 
in Assembler und Teils in C geschrieben ist.

Hierfür ist es nötig dass ich die Adresse einer in C definierten 
globalen Variable in die Pointerregister Xh und Xl (r26 und r27) lade.

irgendwo habe ich das gefunden:

asm volatile (""::"XL"(bTest)              );
asm volatile (""::"XH"(bTest+1)            );

wobei bTest eine globale Variable des Typs unsigned char ist.

dass obige funktioniert aber leider nicht.
Moderator Persönliche Seite #693154
Lesenswert?
• ▲
▼
Mach doch bitte trotzdem mal Nägel mit Köpfen, und schreib das
komplette Konstrukt auf, das du da übertragen willst.

Bist du dir sicher, dass der inline-Assembler überhaupt das beste
Mittel der Wahl ist?  Vielleicht wäre ja eine separate Assemblerdatei
viel besser?  Beim inline-Assembler muss man einfach sehr genau den
Compiler über die Details informieren, beispielsweise müsstest du in
diesem Falle r26 und r27 als `clobbers' anzeigen, damit der Compiler
weiß, dass er dieses Register ggf. neu laden (oder es einfach meiden)
muss.  U. U. wäre es aber viel praktischer, dem Compiler die maximale
Freiheit zu lassen und statt hart codierter XL/XH-Register einfach
per inline-asm-constraint zu verlangen, dass er einem einen Parameter
als Zeigerregister zur Verfügung stellt.  In diesem Falle hätte der
Compiler die Möglichkeit, das tatsächlich verwendete Zeigerregisterpaar
nach den übrigen Randbedingungen selbst zu wählen.

Verstehst du jetzt, warum ich nicht nur ein 2-Zeilen-Schnipsel sehen
möchte?

(Ach so, unter noch anderen Umständen könnte es sein, dass man das Ganze
ja auch besser gleich in C schreibt...)

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