seltsames Verhalten if-Bedingung

Gast #3241277
Lesenswert?

Hey!

weiß einer warum die zweite if-Bedingung nicht aufgerufen wird obwohl 
die Bedingung gegeben ist? Port toggelt immer noch...

1
 if (s_IO.ucChargerPresent == 1){
2
    __disable_interrupt();
3
  PORTC &= ~ (1 << PC0 | 1 <<PC4 | 1 << PC1 | 1 << PC5 | 1 << PC3 | 1 << PC2);
4
  
5
  PORTB |=  ( 1 << PB2 );
6
  _delay_ms(6000);
7
  PORTB &= ~ ( 1 << PB2 );
8
  _delay_ms(6000);
9
    
10
  
11
  ChargeCurrent_Write();
12
  ChargeVoltage_Write();
13
  InputCurrent_Write();
14
  //__enable_interrupt();
15
  
16
  if (s_IO.ucChargerPresent == 0)
17
  {  __disable_interrupt();
18
    PORTB &= ~ ( 1 << PB2); 
19
    PORTC |=  (1 << PC0 | 1 << PC4 | 1 << PC1 | 1 << PC5 | 1 << PC3 | 1 << PC2);
20
  }
21
  }
#3241352
Lesenswert?

nebie schrieb:
> Kurt schrieb:
>> Die zweite if-Bedingung steht innerhalb der ersten...
>
> ah wie blind von mir... du hast vollkommen recht Kurt

Tja.
Wenn dich so ein Konstrukt
1
  }
2
  }
im Code nicht stutzig macht.
2 geschlossene Klammen können bei korrekter Einrückung nie untereinander 
stehen.
Rückt man aber korrekt ein, dann würde man so manchen Fehler in den 
Code-Schachtelungen sehen.

>
> Karl Heinz Buchegger schrieb:
>> Wer oder was ist s_IO?
>> Wie wird es verändert? Wo wird es verändert?
>
> // Ladespannung abfragen
>   if ( (PIND&0x20) > 0 ){
>     s_IO.ucChargerPresent = 1;
>   } else {
>     s_IO.ucChargerPresent = 0;
>   }

OK. Und wo findet sich der Aufruf in deinem Codestück, mit dem dieses 
Auswertung laufen würde?
Oder war die Sache mit der fehlerhaften Einrückung / Schachtelung schon 
des Rätsels Lösung?
#3241354
Lesenswert?

Kurt schrieb:
> Die zweite if-Bedingung steht innerhalb der ersten...

Deshalb der Übersichtlichkeit halber so schreiben, dass öffnende und 
schließende Klammern eines Blocks immer untereinander stehen:
1
  if (Bedingung)
2
  {
3
    Code;
4
    Code;
5
  }
6
  else
7
  {
8
    Code;
9
    Code;
10
  }
11

12
  if (Andere Bedingung)
13
  {
14
    ...
15
  }
16

17
  ...
Grüße,
Andario

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren