Kann es passieren, dass mir dieser Ausdruck wegoptimiert wird?
1 | uint8_t dummy; // wird nie gelesen |
2 | |
3 | dummy = SPSR; |
4 | dummy = SPDR; |
|
|
Forum: Compiler & IDEs Könnte dieser Ausdruck wegoptimiert werden?Kann es passieren, dass mir dieser Ausdruck wegoptimiert wird?
Wegoptimieren kann der Compiler nur Teile eines fehlerfrei kompilierbaren Programms. Soweit kommt der bei den drei Zeilen also gar nicht. Vielleicht formulierst du mal etwas genauer, was das wirkliche Problem ist. Oliver
Sinn und Zweck: Mit den zwei Codezeilen wird das SPI-Interruptflag gelöscht. Da die hier verwendeten Register als volatile deklariert sein sollten, sollte eigentlich das Konstrukt nicht wegoptimiert werden. Sicher geht man, wenn "dummy" auch noch als volatile deklariert wird. Rufus Τ. Firefly schrieb: > Da die hier verwendeten Register als volatile deklariert sein sollten, > sollte eigentlich das Konstrukt nicht wegoptimiert werden. Zumindest werden die Register dann mit Sicherheit gelesen. Was mit dem gelesenen Ergebnis passiert, ist offen. Da aber Ergebnis und dummy eh nie verwendet werden, ist das eigentlich auch egal. Insofern könnte man an Stelle von >dummy = SPSR; >dummy = SPDR; auch einfach >SPSR; >SPDR; schreiben. Oliver Oliver S. schrieb: > auch einfach > >>SPSR; >>SPDR; > > schreiben. Genau so ist es richtig. Die Dummy-Variable würde der Compiler ohnehin wegoptimieren, also kann man sie auch gleich weglassen. Man vermeidet dadurch auch eine Warnung wegen "unused variable", und der Leser des Codes muss nicht suchen, ob dummy vielleicht doch noch irgendwo anders verwendet wird. Yalu X. schrieb: > Oliver S. schrieb: >> auch einfach >> >>>SPSR; >>>SPDR; >> >> schreiben. > > Genau so ist es richtig. Die Dummy-Variable würde der Compiler ohnehin > wegoptimieren, also kann man sie auch gleich weglassen. Man vermeidet > dadurch auch eine Warnung wegen "unused variable", und der Leser des > Codes muss nicht suchen, ob dummy vielleicht doch noch irgendwo anders > verwendet wird. Kann man dann auch so ausdrücken, daß die Register gelesen werden, deren Inhalt aber nicht verwendet werden. D.h. die Register werden nur wegen der damit verbundenen Seiteneffekte (dem volatile in der Definition) gelesen:
Vielen Dank für die Antworten, ich werde dann die dummy-Variable weglassen. 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.
|
|