www.mikrocontroller.net

Forum: Compiler & IDEs Masken zu setzen/löschen von Bits


Autor: Harry Jacobsen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe im Zusammenhang mit dem GNU Compiler eine neue Art gelernt,
einzelne Bits zu setzen. Ich nehme als Beispiel einmal das Setzen des
Bit7:
GNU-Methode: Testbyte |= (1<<7);
meine übliche Methode:Testbyte |= 0x80;

Nun meine Frage: ich bin der Meinung, dass beide Methoden gleichwertig
sind, was Laufzeit und Codegrösse angehen, oder irre ich mich? Dass man
nur mit der ersten Methode die vordefinierten Bits aus den
Header-Dateien der Prozessoren verwenden kann, ist schon klar.Gibt es
sonst noch Gründe, die eine oder ander Methode vorzuziehen?

Viele Grüsse
Harry

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beide Methoden sind gleichwertig und erzeugen denselben Code.

Es gibt aber Befehle, für die die Bitnummer (0 bis 7)angegeben werden
muss. Deshalb ist es sinnvoll, grundsätzlich die Bitnummern zu
verwenden und bei Bedarf durch (1<<7) auf die Maskendarstellung
umzurechnen.

Normalerweise gibst Du die Bitnummer auch symbolisch an und nicht als
nackte Zahl. Statt (1<<7) kannst Du _BV(7) schreiben (ich denke,
übersetzt heisst das Bit-Value(7)).

Stefan

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja sie sind gleichwertig weil der compiler eigentlich erkennen müsste,
dass es sich hier um constanten handelt sprich aus dem 1<<7 wird 80hex
;)

ich ziehe 1<<7 vor weil man da sich nix merken muss und man sofort
sieht das wievielte bit man da setzt...

nebenbei bemerkt...wenn du z.b defines hast wo drinnen steht welches
bit das ist (z.b uart bei der config) dann mach ich auch
1<<DEFINE_VOM_BIT und das passt dann...da wird nix herumgerechnet...das
passt einfach...

ich find das einfach angenehmer...

und man weis auch wenn man siehst sofort, dass x&=~(1<<5); das 5. bit
löscht ;)

und daher nehmen die gnu-leute auch das soo gerne ;)
die haben ja auch den gcc gebastelt weil sie zu faul sind sich für ich
weis nicht wieviele compiler die eigenheiten zu merken...
brauchen sie einen compiler der java,c,c++,perl,... ausspucken kann bzw
aus diesen sources executeables macht G

73 de oe6jwf / hans

Autor: Harry Jacobsen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es scheint also wie vermutet Geschmacksache zu sein, und das ist schön
so.

Also lösche ich Bit 5 weiter so, weil es für mich leichter lesbar ist:

#define MASK_BIT5 0x20 /*in irgendeinem passenden Header-File*/
x &= ~MASK_BIT5 ;

Viele Grüsse
Harry

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.