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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.