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?
Kann dir wohl keiner genau sagen. ;-) Vermutlich sind r2...r15 tatsächlich geeignet.
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
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.