Forum: Mikrocontroller und Digitale Elektronik Code Erklärung


von Bernd (Gast)


Lesenswert?

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! :-(((
von Coder (Gast)


Lesenswert?

Also nimm' es nicht persönlich. Wenn man eine Sprache schlecht 
kann,versteht man nicht viel. Wenn Du in C noch nicht fit bist, hilft 
ein C Tutorial und lernen. Doppelt blöd ist es natürlich, wenn 
zusätzlich Du noch nicht so gut den Mikrocontroller kennst.
von Klaus T. (gauchi)


Lesenswert?

deklaration test1: ganz oben. Das ist die Deklaration. Was Du suchst 
ist die Definition, die in dem Beispiel nicht drinsteht und für das 
Beispiel auch unerheblich ist.

extern: bedeutet, dass die Funktion test in einem anderen Source-file 
definiert ist und hier nur steht wie man sie aufruft

Verkürzung: Diejenige, die Du nach einem halben Jahr noch lesen kannst.

Ansonsten: gegen schlecht Programmieren hilft nur: üben. Für C üben 
würde ich einen PC empfehlen, da ist es einfacher, Fehler zu finden als 
auf dem µC, wo Du im Extremfall nur siehst, dass Du nichts siehst.
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.