www.mikrocontroller.net

Forum: GCC Register Manipulationen ODER Operator


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sebastian Kreuzer (bastik)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

kurze frage - arbeite mich gerade in GCC ein - war davor Bascom Nutzer.

Ich habe mich jetzt schon durch einige Beispiele durchgearbeitet und für 
mich wird nicht eindeutig klar was genau der Unterschied zwischen:

TCCR0B = (1<<CS02) | (1<<CS01) | (1<<CS00);

und

TCCR0B |= (1<<CS02) | (1<<CS01) | (1<<CS00);

ist. Meiner Meinung nach keiner - Darf ich beides gleich behandeln oder 
tapp ich in eine Falle.

Also aus dem was ich bisher aus den Tutorials gelesen hab wird es mir 
nicht klar - mal wird es so gemacht und ein anderes mal so.

Wäre nett wenn ihr mir bei dieser Anfänger Frage weiterhelfen könntet.

Schönes Wochenende - Sebastian

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sebastian Kreuzer schrieb:
> Meiner Meinung nach keiner - Darf ich beides gleich behandeln oder
> tapp ich in eine Falle.

dann überleg doch mal wenn

TCCR0B = 0xFF

ist, was ein beiden Fällen passiert.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sebastian Kreuzer schrieb:

> TCCR0B = (1<<CS02) | (1<<CS01) | (1<<CS00);
>
> und
>
> TCCR0B |= (1<<CS02) | (1<<CS01) | (1<<CS00);
>
> ist. Meiner Meinung nach keiner

Dann hast du noch nicht verstanden, wofür das |= steht

    a |= b;

ist die Kurzschreibweise für

    a = a | b;

da geht also das was links vom = steht auch noch in den Ausdruck rechts 
mit ein.

Autor: Sebastian Kreuzer (bastik)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ok... ich glaub fast mein Verständniss Problem lag wo anders.... aber 
egal:

Also lieg ich dann Richtig in der Annahme, dass

TCCR0B = (1<<CS02) | (1<<CS01) | (1<<CS00);

und

TCCR0B = (1<<CS02);
TCCR0B |= (1<<CS01);
TCCR0B |= (1<<CS00);

das gleiche Ergebnis zur Folge hätte ( bezüglich auf den Inhalt im 
TCCR0B )?

Also wenn ich in Registern ein Bit setzen will ohne das die Bits die ich 
zuvor eventuell gesetzt habe verändern will nehme ich :

|=

Sonst - z.b. beim ersten beschreiben - bei der ich alle Einstellungen 
vornehme - kann ich einfach

=

schreiben.

Aber da ja die Register am anfang sowieso auf 0x00 stehen würde ein |= 
bei der Initalisierung auch nicht stören.

Also angenommen TCCR0B = 0x00 im Vorfeld
würde es egal sein ob ich

TCCR0B = (1<<CS02) | (1<<CS01) | (1<<CS00);
oder
TCCR0B |= (1<<CS02) | (1<<CS01) | (1<<CS00);
schreibe

Wenn TCCR0B ungleich 0x00 würde ich aber Probleme bekommen

Hab ich es richtig zusammengefasst/verstanden ?!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sebastian Kreuzer schrieb:
> Aber da ja die Register am anfang sowieso auf 0x00 stehen würde ein |=
> bei der Initalisierung auch nicht stören.

Wenn sie es tun. Tun sie das? Immer?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net