2017-12-05 2 views
-1

Wie erreicht man diese einfache Logik?Trivial-Abfrage mit if-Anweisungen

void IRQHandler(void) 
{ 
    if(update_variable == 0) 
    { 
     if(CONDITION1) 
     { 

      /* MORE CODE */ 
      update_variable = 1; 
      } 
    } /* Here i want to exit the loop */ 

    if(update_variable == 1) /* execute in next loop */ 
    { 
     if(CONDITION1) 
      { 
      /* MORE CODE */ 
      /*UPDATE SOME ARRAY */ 
      update_variable = 0; /* reset variable for next loop */ 
      } 
     } 
    } 

Im Wesentlichen möchte ich über zwei aufeinander folgende Unterbrechungen für die gleiche Bedingung1 überprüfen. Für den ersten Interrupt möchte ich den Variablenwert auf 1 setzen und die Schleife verlassen (genau die folgende if-Bedingung nicht ausführen). Wie ich sehe, kann ich die Break-Bedingung nicht mit "if" verwenden! Ich bin hier für eine Weile geschlagen! Bitte hilf mir!

+1

'if' ist eine Bedingung, keine Schleife, aus der Sie" brechen "können! –

+0

Verwenden Sie eine statische Variable mit einem Schalter. –

Antwort

2

Sie Schleifen sind zu erwähnen und Sie nicht verwenden.

Aus was ich über Ihre Frage verstehe, und Sie möchten nicht die zweite Bedingung EVER eingeben, nur eine else Bedingung verwenden.

void IRQHandler(void) 
{ 
    if(update_variable == 0) 
    { 
     if(CONDITION1) 
     { 

      /* MORE CODE */ 
      update_variable = 1; 
      } 
    } /* Here i want to exit the loop */ 

    else if(update_variable == 1) /* execute in next loop */ 
    { 
     if(CONDITION1) 
      { 
      /* MORE CODE */ 
      /*UPDATE SOME ARRAY */ 
      update_variable = 0; /* reset variable for next loop */ 
      } 
     } 
    } 
0

Es gibt keine Schleife in Ihrem Code, nur eine Reihe von Auswahlanweisungen mit if Bedingung.

In diesem Fall, wenn Sie dies als einen Funktionskörper sehen, wenn Sie möchten, dass die Ausführung nicht zum Restteil fortgesetzt wird, können Sie immer return ; von der Funktion.

0
if(update_variable == 0) 
    { 
     if(CONDITION1) 
     { 
      /* MORE CODE */ 
      update_variable = 1; 
      } 
     return; 
    } /* Here i want to exit the loop */ 

Es ist nicht eine Schleife, so gibt es nichts zu break aus. Verwenden Sie return, um die Funktion zu beenden.

In diesem Fall ist es besser, für die Antwort von M.K zu gehen und else zu verwenden, aber Rückkehr ist immer eine Option, um eine Funktion an einer beliebigen Stelle im Code zu beenden. Es kann sehr nützlich sein, wenn Sie eine Menge verschachtelter if-Anweisungen beenden möchten.

Beispiel:

if(cond1) { 
    <code> 
    if(cond2) { 
     <code> 
     if(cond3) { 
     <code> 
     if(cond4) { 
      return; 
     } 
     <code> 
     } 
    <code> 
    } 
} 
-1
if(CONDITION1) 
{ 
    if(update_variable == 0) 
    { 
     /* MORE CODE */ 
      update_variable = 1; 
    } 
    else if(update_variable == 1) 
    { 
     /*Update Some Array*/ 
     /* MORE CODE */ 
      update_variable == 0; 
    } 
} 

einfach eine else Bedingung verwenden, und es wäre besser, wenn Sie CONDITION1 zunächst prüfen.

+0

Sie können die if else-Anweisung in eine einzeilige Anweisung wie folgt ändern: 'update_variable = 0? 1: 0', Und hier ist was ** BEDINGUNG1 **? –