Forum: Mikrocontroller und Digitale Elektronik AS 7 Inline Assembler Variablen


von Leopold N. (leo_n)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Leopold N. (leo_n)


Lesenswert?

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
Noch kein Account? Hier anmelden.