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
> 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.
Ja, schalte doch einfach mal die Optimierungsstufe -Os an. Die Optimierungen, die da gemacht werden sind ziemlich gut.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.