PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Nachhilfe



irobot_22587
27.02.2007, 19:54
Kann mir einer mal bitte einen kurzen Nahhilfekurs bei den C Bit-Bearbeitungsbefehlen geben. Man findet diesen Code zuhauf in der asuro.c und den direkten Ansteuerungen der verschiedenen Register. Hier mal 4 Beispiel Code-Zeilen:

#define RIGHT_DIR (1 << PB4) | (1 << PB5) // !< PB4, PB5 Ports fuer Drehrichtung rechter Motor
TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED;
TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);


Insbesondere interessiert mich der |= Befehl und das (1 << WGM10) | (1 << COM1A1)

Wer kann mir helfen und zusätzlich noch ein guten downloadable C-Primer empfehlen.

Besten Dank!

damaltor
27.02.2007, 23:06
also:
wenn ein operator direkt vor einem gleichzeichen steht dann bedeutet das folgendes:
anstelle von VARIABLE A (operator)= Wariable B
kann man auch schreiben
VARIABLE A = VARIABLE A (operator) VARIABLE B

also:
a+=b ist das gleiche wie a=a+b
und
a|=b ist das gleiche wie a=a|b
die in grossbuchstaben geschriebenen worte sind register. in jedem register steht eine 8bit-zahl.
nehmen wir mal 8-bit zahlen als beispiel:
11110000 | 00001111 = 11111111
(| bedeutet oder, also wenn eines der bits gesetzt ist dann ist im ergebnis das bit gesetzt)
also wenn a=11110000 und b=00001111 dann:
a|=b
danach ist a=11111111

die pfeile << bedeuten folgendes:
aus
00000001 wird
00000010
es wird also verschoben. das gegenzeichen dazu ist logischerweise >>

zum beginn mit c (diese befehle sind auf registerebene und haben mit c nur bedingt was zu tun) empfehle ich dir das hier:
http://download.galileo-press.de/openbook/c_von_a_bis_z/galileocomputing_c_von_a_bis_z.zip
hier als online-version mit suchfunktion:
http://www.pronix.de/pronix-4.html

irobot_22587
28.02.2007, 20:19
also:
wenn ein operator direkt vor einem gleichzeichen steht dann bedeutet das folgendes:
anstelle von VARIABLE A (operator)= Wariable B
kann man auch schreiben
VARIABLE A = VARIABLE A (operator) VARIABLE B

also:
a+=b ist das gleiche wie a=a+b
und
a|=b ist das gleiche wie a=a|b
die in grossbuchstaben geschriebenen worte sind register. in jedem register steht eine 8bit-zahl.
nehmen wir mal 8-bit zahlen als beispiel:
11110000 | 00001111 = 11111111
(| bedeutet oder, also wenn eines der bits gesetzt ist dann ist im ergebnis das bit gesetzt)
also wenn a=11110000 und b=00001111 dann:
a|=b
danach ist a=11111111

die pfeile << bedeuten folgendes:
aus
00000001 wird
00000010
es wird also verschoben. das gegenzeichen dazu ist logischerweise >>

zum beginn mit c (diese befehle sind auf registerebene und haben mit c nur bedingt was zu tun) empfehle ich dir das hier:
http://download.galileo-press.de/openbook/c_von_a_bis_z/galileocomputing_c_von_a_bis_z.zip
hier als online-version mit suchfunktion:
http://www.pronix.de/pronix-4.htmlvielen Dank "damaltor".

Letzte Frage. Was bedeutet dann "(1 << WGM10)" ?

gruß

raid_ox
28.02.2007, 20:41
ein register hat 8bit, also 00000000. wenn du ein bestimmte bit verändern will machst du (1 << [bit nummer 0 bis 7]).
0 ist die erste bit, 7 ist die letzte
bits anordnung: 76543210

beispiel
a = 0b00000000 // 0bxx ist binärschreibweise wie 0xFF für hexadecimal
a |= (1 << 2) // die dritte bit wird gesetzt

a ist jetzt 00000100

damaltor
01.03.2007, 15:59
genau.
WGM10 ist einer der register des asuro. wenn du im datenblatt suchst (gib ma STRG+F ein, dann kannst du suchen) dann findest du eine erklärung der funktion.
und in diesem register wird dann ein bit gesetzt.