Forum: Compiler & IDEs Variablen nur in Registern, zuviel gepoppe in Interrupts?


von pripri (Gast)


Lesenswert?

Nabend,
Hab bisher Assembler programmiert und bin nun dabei mich in den GCC 
einzuarbeiten.
Was mir auffiel:
1. Variablen werden im Ram abgelegt, auch wenn ich zB nur eine brauche. 
Gibts ne Möglichkeit, die Variable als Register zu deklarieren?
2. Bei Interrupts werden erstmal R0, R1, R24, R25, R28, R29 gepusht, 
auch wenn ich sie nicht brauche und dann natürlich auch wieder gepoppt. 
Kann man das auch umgehen?
mfg pripri

von Chris (Gast)


Lesenswert?

> 1. Variablen werden im Ram abgelegt, auch wenn ich zB nur eine brauche.
> Gibts ne Möglichkeit, die Variable als Register zu deklarieren?

Es gibt eine Möglichkeit (Forumsuche benutzen).

Aber(!) diese Möglichkeit möchtest du wahrscheinlich nicht benutzen, 
weil nicht garantiert ist, dass sie in einem Jahr noch funktioniert und 
weil sie dir vermutlich zu wenig Vorteile bringt um diese 
Inkompatibilitätsgefahr zu kompensieren.

Dadurch, dass du eine Hochsprache wie C benutzt, erhältst du eine 
gewisse Abstraktion. Das Konzept "Register" wird von dieser Abstraktion 
versteckt.
Deswegen ist es eher unnatürlich in C Variablen an bestimmte Register zu 
binden. Bei lokalen Variablen wird der Compiler selbstverständlich auch 
ohne besondere Hinweise Register nutzen. Je nach Verwendung und 
Optimierungseinstellungen wird er die Variable sogar komplett vom RAM 
fernhalten und ausschließlich in einem Register speichern.

von Matthias (Gast)


Lesenswert?

Ja, schalte doch einfach mal die Optimierungsstufe -Os an. Die 
Optimierungen, die da gemacht werden sind ziemlich gut.

von Peter D. (peda)


Lesenswert?

pripri wrote:

> 2. Bei Interrupts werden erstmal R0, R1, R24, R25, R28, R29 gepusht,
> auch wenn ich sie nicht brauche und dann natürlich auch wieder gepoppt.

Nein, R24, R25, R28, R29 werden nur gepusht, wenn man sie auch braucht

Und das Geeiere mit R0, R1 hat historische Gründe.
Sie wurden als Null- bzw. Statussaveregister deklariert, aber können von 
LPM, MUL geändert werden.
Ein Wechsel z.B. auf R2, R3 wurde bisher nicht angegangen, also muß man 
damit leben.


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