Hallo! In der avr-libc steht ja, wie man eine Variable permanent an ein Register bindet. Ist das unbedingt nötig, wenn man auf die Variable in einem Programm zugreifen will, das aus C- und Assembler Code besteht? Oder könnt man der Varibale einen Speicherplatz im SRAM zuweisen? Danke
Fire Eagle schrieb: > Hallo! > > In der avr-libc steht ja, wie man eine Variable permanent an ein > Register bindet. > Ist das unbedingt nötig, wenn man auf die Variable in einem Programm > zugreifen will, das aus C- und Assembler Code besteht? Das eine hat nicht unbedingt etwas mit dem anderen zu tun. Und wenn man eine Registerbindung macht, sollte man schon sehr genau wissen was man tut. Da gibts nämlich einige Stolpersteine. > Oder könnt man der Varibale einen Speicherplatz im SRAM zuweisen? Das ist der normale Weg. Du legst deine Variablen in C an wie sonst auch. Im Assembler gibt es dann direktiven, wie man wieder an diese herankommt.
Danke für deine Antwort. Und wie funktioniert der Zugriff dann in Assembler?
Fire Eagle schrieb: > Und wie funktioniert der Zugriff dann in Assembler?
1 | lds REG, C_Name_of_Variable |
Fire Eagle schrieb: > Also gar nicht mit Adressoperator "&variable"? Wovon reden wir denn jetzt eigentlich genau? Eine separate Assembler-Datei, oder Inline-Assembler?
Stefan Ernst schrieb: > Fire Eagle schrieb: >> Also gar nicht mit Adressoperator "&variable"? > > Wovon reden wir denn jetzt eigentlich genau? Eine separate > Assembler-Datei, oder Inline-Assembler? Ist egal; sie Syntax ist die gleiche.
1 | ; 16-Bit Variable laden: |
2 | lds r0, var |
3 | lds r1, var+1 |
1 | ;; Adresse nach Z laden und indirekter 16-Bit Zugriff |
2 | ldi r30, lo8(var) |
3 | ldi r31, hi8(var) |
4 | ld r0, z |
5 | ldd r1, z+1 |
Johann L. schrieb: > Stefan Ernst schrieb: >> Fire Eagle schrieb: >>> Also gar nicht mit Adressoperator "&variable"? >> >> Wovon reden wir denn jetzt eigentlich genau? Eine separate >> Assembler-Datei, oder Inline-Assembler? > > Ist egal; sie Syntax ist die gleiche. Worauf ich mit der Frage hinaus wollte ist, dass der Adress-Operator bei Inline-Assembler für den Zugriff auf C-Variablen zur Anwendung kommen könnte. Natürlich nicht direkt im Assembler-Code, aber in den Constraints.
Stefan Ernst schrieb: > Worauf ich mit der Frage hinaus wollte ist, dass der Adress-Operator bei > Inline-Assembler für den Zugriff auf C-Variablen zur Anwendung kommen > könnte. Natürlich nicht direkt im Assembler-Code, aber in den > Constraints. Ein "&" in einer Constraint hat nix mit Adressoperator oder -berechnung zu tun; es ist ein early-clobber.
Johann L. schrieb: > Ein "&" in einer Constraint hat nix mit Adressoperator oder -berechnung > zu tun; es ist ein early-clobber. Ja, schon klar, das was ich meine gehört wohl nicht zum "Constraint", sondern ist der "Operand", oder was auch immer.
1 | "z" (&var) |
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.