Gast
#2524743
Hallo, bin dabei das Tutorial AVR GCC durchzulesen. da ich ziemlich schlecht beim Programmierung bin, verstehe ich dieses Code nicht : #define MEINBIT0 0 #define MEINBIT2 2 uint8_t i; extern test1(); // Funkion test1 aufrufen, wenn Bit 0 in Register PINA gesetzt (1) ist i = PINA; // Inhalt in Arbeitsvariable i = i & 0x01; // alle Bits bis auf Bit 0 ausblenden (bitweise und) // falls das Bit gesetzt war, hat i den Inhalt 1 if ( i != 0 ) { // Ergebnis ungleich 0 (wahr)? test1(); // dann muss Bit 0 in i gesetzt sein -> Funktion aufrufen } // verkürzt: if ( ( PINA & 0x01 ) != 0 ) { test1(); } // nochmals verkürzt: if ( PINA & 0x01 ) { test1(); } // mit definierter Bitnummer: if ( PINA & ( 1 << MEINBIT0 ) ) { test1(); } // Funktion aufrufen, wenn Bit 0 und/oder Bit 2 gesetzt ist. (Bit 0 und 2 also Wert 5) // (Bedenke: Bit 0 hat Wert 1, Bit 1 hat Wert 2 und Bit 2 hat Wert 4) if ( PINA & 0x05 ) { test1(); // Vergleich <> 0 (wahr), also mindestens eines der Bits gesetzt } // mit definierten Bitnummern: if ( PINA & ( ( 1 << MEINBIT0 ) | ( 1 << MEINBIT2 ) ) ) { test1(); } // Funktion aufrufen, wenn Bit 0 und Bit 2 gesetzt sind if ( ( PINA & 0x05 ) == 0x05 ) { // nur wahr, wenn beide Bits gesetzt test1(); } // Funktion test2() aufrufen, wenn Bit 0 gelöscht (0) ist i = PINA; // einlesen in temporäre Variable i = i & 0x01; // maskieren von Bit 0 if ( i == 0 ) { // Vergleich ist wahr, wenn Bit 0 nicht gesetzt ist test2(); } // analog mit not-Operator if ( !i ) { test2(); } // nochmals verkürzt: if ( !( PINA & 0x01 ) ) { test2(); } ist es normal das ein Anfänger solches Code nicht kapiert? Fragen : ->Wo wird die Funktion test1() deklariert?oder ist es schon im <avr/io.h> definiert? ->wozu dient "extern"? -> welche Verkürzung ist besser? Please lacht mich nicht aus! :-(((