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