Forum: Compiler & IDEs Shift Syntax ?


von PierceG (Gast)


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

von Johannes M. (johnny-m)


Lesenswert?

SWRES ist ein Makro, das irgendwo in einer Header-Datei definiert ist in 
der Art
1
#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
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.

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
Noch kein Account? Hier anmelden.