Hallo, ich habe ein recht simples Problem. Ich definiere in einer Funktion eine Variable und möchte auf diese im Inline Assembler Teil zugreifen. Nun gibt mir der Compiler den Error aus (Anhang) Wie kann ich auf "i" zugreifen? Und wie kann ich auf globale Variablen zugreifen? Grüße
Lies das Inline Assembler Cookbook: https://www.nongnu.org/avr-libc/user-manual/inline_asm.html Erstmal: __i__ und i sind zwei verschiedene Objekte. Zweitens: Zugriff auf globale Variablen funktioniert in der Tat, indem man sie einfach benennt. Allerdings gibt es eben bei dir keine globale Variable namens __i__, daher spuckt am Ende der Linker (der Assembler hatte an deiner Anweisung nichts auszusetzen!). Drittens: globale Variablen für die Kommunikation sind so ziemlich die schlechteste Wahl. Viertens: wenn es nicht gerade zur eigenen Weiterbildung ist, vielleicht fängst du ja lieber von vorn an zu erzählen, was du denn eigentlich mit dem Inline Assembler bewerkstelligen willst. In 95 % der Fälle, in denen Nutzer dieses schwere Geschütz auffahren, ist es eigentlich völlig unnötig, da der Compiler das Ansinnen genauso gut erledigen könnte. Fünftens: normalerweise würde man beim Zugriff auf eine lokale Variable gar nicht erst diese aus dem Speicher lesen, sondern die constraints (siehe Inline Asm Cookbook) passend setzen, sodass der Compiler sich darum kümmert, den Wert 100 in einem Register bereitzustellen, aus dem man ihn dann sofort weiterbenutzen kann. Die von dir gewünschte Anweisung würde damit entfallen, du könntest sofort mit der nächsten in deinem Assemblercode weiterschreiben, die von diesem Wert im entsprechenden Register ausgeht. Auch das Register selbst wird dabei nicht konkret benannt, sondern es wird nur dem Compiler mitgeteilt, welche Art Register man braucht (beliebiges, aus der oberen Hälfte, Zeiger …). Die konkrete Zuteilung macht dann wieder der Compiler. Auf diese Weise steht man dem Compiler bei Optimieren nicht unnütz im Weg herum.
:
Bearbeitet durch Moderator
Erstmal danke für die Antwort. Ich habe eben eine andere Lösung für mein Problem gefunden, so dass ich nicht auf Assembler zurückgreifen muss. Grüße
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.