mikrocontroller.net

Forum: Compiler & IDEs Shift Syntax ?


Autor: PierceG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich beschäftige mich erst seit kurzem mit c und hab folgende Frage aus 
einer Header-file einer CAN Bibliothek.

#define Can_reset()       ( CANGCON  =  (1<<SWRES) )

Ich versteh den Shift-Befehl nicht ganz, wobei SWRES nur ein 0 oder 1 
werden kann (einzelnes Bit aus CANGCON-Registers, in dem Fall wird dies 
"1", wenn ein Hardware-Reset erfolgt).

ich versteh das so:

0000 0001 = 1 ; dann der Befehl 1<<SWRES ; kein Hardware-Reset
das versteh ich noch, da wird der Controller über Software resetet.

aber wenn Hardware-Reset == 1 ist und ich Can_reset() ausführe folgt

0000 0001 --> 0000 0010 ; dann verändere ich aber das falsche Bit im 
CANGCON

oder verwechsel ich das was mit LSB und MSB?

vielen Dank schon mal

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SWRES ist ein Makro, das irgendwo in einer Header-Datei definiert ist in 
der Art
#define SWRES 2
(2 jetzt nur als Beispiel, ich weiß nicht, an welcher Stelle das Bit 
SWRES in CANGCON tatsächlich steht)
"1 << SWRES" mach nichts anderes, als eine binäre 1 (also 00000001) um 
"SWRES" Stellen nach links zu schieben, also in diesem Beispiel um 2 
Stellen. Das ergibt dann
1 << SWRES => 00000001 << 2 => 00000100
Dieses 00000100 wird jetzt in CANGCON geschrieben. Das Makro SWRES 
beinhaltet bei dieser Notation nur die Position (Nummer) des Bits im 
Register. Durch die Operation wird lediglich das mit SWRES bezeichnete 
Bit im Register gesetzt, alle anderen Bits werden 0.

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.