AS 7 Inline Assembler Variablen

OP #5584159
Lesenswert?

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
Angehängte Dateien:
Moderator Persönliche Seite #5584221
Lesenswert?

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.

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