Hi, ich habe gleich noch eine Frage. Ist es möglich den Compiler anzuweisen das er bestimmte Variablen nicht in's Ram legt sondern permanent in den Registern hält? Wieviele Register werden vom avrgcc überhaupt verwendet?
Ah, danke. Aber irgendwie wirkt sich das eher negativ auf die Laufzeit aus. Seltsam
Man kann jedes Feature ad absurdum treiben, es hängt immer davon ab, wofür du es benutzen willst. Programme für sehr kleine Controller können davon profitieren, zum Beispiel wenn mal alle in ISRs benutzten Variablen in Register auslagert. Dann müssen sie nicht mehr so viel auf den Stack retten.
Markus wrote: > Ah, danke. Aber irgendwie wirkt sich das eher negativ auf die Laufzeit > aus. Seltsam Nicht wirklich. Es ist eher selten (Jörg hat einen Fall aufgezeigt), in dem du mit einer Register Zuweisung dein Programm besser optimieren kannst als der Compiler. Auf PCs wird zb. gerne die Regel ausgegeben: Im besten Fall ignoriert der Compiler deinen register- Wunsch. Also lass es lieber bleiben. Compiler haben ausgeklügelte Algorithmen die auf Datenfluss Analyse basieren um die Register Belegung zu optimieren. Lediglich in Ausnahmefällen, wie zb. Interrupt Routinen kann eine explizite register Vereinbarung etwas bewirken. Aber immer daran denken: Wenn du ein Register für eine bestimmte Variable reservierst, dann steht dieses Register an anderer Stelle für den Compiler nicht mehr zur Verfügung. D.h. an einer Stelle wird dadurch der Zugriff auf eine Variable zwar schneller, aber dafür kann es passieren, dass an 50 anderen Stellen extra Klimmzüge gemacht werden müssen um den Ausfall dieses Registers zu kompensieren.
>D.h. an einer Stelle wird dadurch der Zugriff >auf eine Variable zwar schneller, aber dafür kann es passieren, >dass an 50 anderen Stellen extra Klimmzüge gemacht werden müssen >um den Ausfall dieses Registers zu kompensieren. Möglich. naja, Pech gehabt
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.