Frage zum Kompiler (allgemein)

Gast #503409
Lesenswert?

Nein da wird nicht's verodert, die Befehle werden nacheinander 
ausgeführt. PORTB ist als Volatile definiert da es ein IO- oder 
CPU-Register ist..

PORTB = (1<<2); // => PORTB= 0b0000'0100
PORTB = (1<<5); // => PORTB= 0b0010'0000

MfG  Peter

Gast #503504
Lesenswert?

Wenn der Compiler da etwas verodern würde, wäre das grob falsch! Nach 
der zweiten Zuweisung darf (selbst wenn das Ziel der Zuweisung nicht 
volatile wäre) nichts mehr von der ersten Zuweisung da sein. 
Allerhöchstens könnte, wie Andreas schon anmerkte, die erste Anweisung 
komplett wegfallen, da sie auf das Endergebnis keine Auswirkung hat. 
Anders wäre das, wenn vor den "=" noch jeweils ein "|" stünde...
Gast #503699
Lesenswert?

Natürlich stimmt die nicht! Wenn Du einer Variable oder einem Register 
mit dem Zuweisungsoperator "=" einen Wert zuweist und direkt danach 
einen anderen, dann überschreibt der zweite den ersten. Das ist doch 
wohl völlig logisch, oder etwa nicht? Wenn Du schreibst "PORTB = 1 << 5" 
(um beim obigen Beispiel zu bleiben), dann steht nach der Zuweisung "1 
<< 5" in PORTB, und nichts anderes.

Solange da kein "|"-Operator steht, darf da gar nichts verodert werden. 
Weiß gar nicht, wie Armin da drauf gekommen ist...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren