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
Stephan schrieb: > TCCR2A = (1 << WGM21); //CTC Modus Es wird einfach nichts verodert, sondern die alte Konfiguration komplett überschrieben.
Walter Tarpan schrieb: > Es wird einfach nichts verodert, sondern die alte Konfiguration komplett > überschrieben. Sprich- wenn man nur ein Bit setzen will und der Rest null werden soll, macht man das so?
wenn du willst, dass i den Wert 5 hast, schreibst du
1 | i = 5; |
nichts von den vorher in i gesetzten Bits überlebt diese Zuweisung.
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).
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.
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.
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.
1 | TCCR1B = (0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(0<<CS10); |
2 | 3bd6: 8a e1 ldi r24, 0x1A ; 26 |
3 | 3bd8: 80 93 81 00 sts 0x0081, r24 |
Ich wüßte nicht, wie man das durch SBIs beschleunigen könnte.
Walter Tarpan schrieb: > Eigentlich war die Anerkennung ja an KHB gerichtet. Da ist sie auch hingegangen. Walter Tarpan schrieb: > Anfängerfragen Nur das hat mich Gebauchpinselt.
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.