Bitmanipulation: Schreibfehler oder Möglichkeit?

Gast #3442410
Lesenswert?

Hallo!

Ich bin im Tutorial über Bitmanipulation auf eine Zeile gestoßen, dessen 
Syntax ich nicht nachvollziehen kann. Ich hielte es für einen 
Schreibfehler- habe aber das Gefühl die schon mal gesehen zu haben.

Am Beispiel der Timereinstellung:


Dieser Code ist nachvollziehbar:
   TCCR2B |= (1 << CS21) | (1 << CS21);  //Prescaler 256

Dieser (ohne ODER-Verknüpfung) nicht...
   TCCR2A = (1 << WGM21);                //CTC Modus

...da es in der nächsten Zeile wieder nach alter Manier heißt
   ASSR |= (1 << AS2);                   //Asynchron Mode einschalten
#3442439
Lesenswert?

Stephan schrieb:
> Sprich- wenn man nur ein Bit setzen will und der Rest null werden soll,
> macht man das so?

Genau. Es wird WGM21 gesetzt und der Rest gelöscht. Ob das Absicht, 
Versehen oder einfach nur egal ist weiß nur der Autor des Quelltextes 
(meist ist es das letztere).

Edit: Und Karl-Heinz ist mir mal wieder zuvorgekommen. Ich finde es 
immer wieder bewundernswert, wieviel Zeit und Energie Du in 
Anfängerfragen stecken kannst.
#3442483
Lesenswert?

Stephan schrieb:
> Fühle mir geschmeichelt

Eigentlich war die Anerkennung ja an KHB gerichtet. Und auch weniger 
wegen der (über jeden Zweifel erhabenen) Fachkenntnisse sondern wegen 
der Geduld. Was ich in den letzten Wochen da geleseh habe - in über mehr 
als 100 Postings einen Arduino-Programmer in Betrieb genommen, in einem 
seitenlangen Thread ein Grafik-LCD initialisiert oder auch nur ein 
"putc" wieder in einen funktionierenden Ausgangszustand 
zurückzuversetzen - ist fast übermenschlich zu nennen.
Gast #3442520
Lesenswert?

Die normale Form zur Initialisierung ist die mit dem =.

Die Form mit dem |= kann man nutzen wenn einige Bis erhalten bleiben 
sollen oder man weiss was vorher im Register steht. Beliebt ist die 
Schreibweise beim AVR, weil sie ggf. etwas schneller geht, wenn nur 1 
oder 2 Bits gesetzt werden.

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