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
Beschreibe mal bitte dein komplettes Problem. Beim inline-Assembler zeigt es sich immer wieder, dass man schlecht Rat geben kann, wenn man sich nur auf ein oder zwei Zeilen des Codes bezieht. Ansonsten kannst du globale Symbole dort einfach so benennen.
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.
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...)
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.