Forum: Compiler & IDEs Welche Register globalen Variablen fest zuordnen


von Malte (Gast)


Lesenswert?

Hallo,
für eine möglichst schnelle Interrupt Routine (AVR, GCC) möchte ich
globale Variablen dauerhaft in Registern halten. Da dies nach meiner
Überlegung pro Byte Variable jeweils ein PUSH,POP,LDS,STS sparen würde
was wiederum 8 Taktzyklen wären.
Wenn ich meine Variablen von
uint8_t volatile rsync;
durch
register uint8_t rsync asm("r2");
ersetze, so wird die Codegröße des Interrupts auch deutlich kleiner.
Allerdings wurde ich aus der avr-libc Doku nicht schlau, welche Regiser
ich auf diese Weise "besetzten" darf ohne das es zu Problemen kommt.
Die FAQ scheint sich da eher auf die Verwendung von Registern in Inline
Assembler zu beschränken. Ideal wäre es wenn ich bis zu 14 Register wie
oben beschieben belegen könnte.
Also welche Register darf ich für globale Variablen belegen?

von Jörg Wunsch (Gast)


Lesenswert?

Kann dir wohl keiner genau sagen. ;-)

Vermutlich sind r2...r15 tatsächlich geeignet.

von Peter D. (peda)


Lesenswert?

Es gibt leider keine Möglichkeit, dem Compiler zu sagen, daß Du Register

exklusiv verwenden willst.

Du mußt also im *.LST-File überprüfen, ob Deine Register wirklich nur
an den Stellen verwendet werden, die Du vorgesehen hast.


Peter

von Malte (Gast)


Lesenswert?

OK :-|
Trotzdem Danke

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.