AVR Variable C und Assembler Zugriff

Gast #2807497
Lesenswert?

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
#2807533
Lesenswert?

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.
Persönliche Seite #2807690
Lesenswert?

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
#2807751
Lesenswert?

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.
Persönliche Seite #2807783
Lesenswert?

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.

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