Forum: Compiler & IDEs Komisches Verhalten bei while Schleifem it Interrupt unterbrechung


von Andy S. (Gast)


Lesenswert?

1
void Spracherkennung()
2
{
3
  //Schreibe auf Display welchen Modus:
4
  LCD_sprach;
5
6
  //Variablen-definitionen
7
  uint8_t getSpokenWord = 0;
8
9
  //Main-Loop:*********************************************************************
10
  while( !((getSpokenWord < 110) && (getSpokenWord > 100)) && !cancel_mode )  //Position 8
11
    //Führe Spracherkennung aus solang bis Beenden gesagt
12
    //wurde oder cancel-Mode Taste gedrückt wurde
13
  {
14
    //getSpokenWord = GetADC_8bit(7);
15
16
    if( (getSpokenWord < 10) && (getSpokenWord > 2))  //Wenn auf Position1 bekommt man einen DAC Wert von <10
17
    {
18
      Linienverfolgung();
19
    }
20
    else if( (getSpokenWord < 20) && (getSpokenWord > 10) )  //Position2
21
    {
22
      Ausweichmodus();
23
    }
24
    else if( (getSpokenWord < 30) && (getSpokenWord > 20) )  //Position3
25
    {
26
      Linienverfolgung_Ausweichmodus();
27
    }
28
    else if( (getSpokenWord < 40) && (getSpokenWord > 30) )  //Position4
29
    {
30
      Funksteuerung();
31
    }
32
    else
33
      ;
34
    lcd_setcursor(0,1);
35
    if(cancel_mode)
36
      lcd_string("true");
37
    else
38
      lcd_string("false");
39
  }
40
  //back***************************************************************************
41
  LCD_Mode_Verlassen;
42
43
  _delay_ms(50); //Wenn cancel gedrückt wurde dann soll entprellt werden
44
  cancel_mode = false;   // Damit können jetzt andere Unterprogramme ausgeführt werden
45
}

Wenn ich diesen Teil:
1
lcd_setcursor(0,1);
2
    if(cancel_mode)
3
      lcd_string("true");
4
    else
5
      lcd_string("false");
weglasse, dann komme ich auch nicht raus wenn cancel_mode true ist.

Problembeschreibung:
Ich habe eine Taste die ich auf den Interrupt führe. Wenn die steigende 
Flanke kommt, dann soll cancel_mode = true gesetzt werden.
1
ISR(INT0_vect)
2
{
3
  cancel_mode = true;
4
}

Danach springt das Programm wieder zur While() schleife.
Und ich sehe am LCD immer noch MODUS: Sprach.

erst wenn ich diesen Teil:
1
if(cancel_mode)
2
      lcd_string("true");
3
    else
4
      lcd_string("false");
wieder dazugebe dann komme ich raus und sehe am LCD MODUS Verlassen.
_____________________________________________________________________


Die Variable cancel_mode wird von sonst keinem Interrupt beeinflusst, 
also nur am Int0.
Was kann denn die Ursache dafür sein?
Kann es sein, dass das LCD einfriert aus irgendeinem Grund? Weil es ist 
wirklich nur dieser Teil, der darüber entscheidet ob ich rauskomme oder 
nicht.

Ich danke schon im Voraus für Support!

lg andy

von (prx) A. K. (prx)


Lesenswert?

volatile vergessen.

von Andy S. (Gast)


Lesenswert?

A. K. schrieb:
> volatile vergessen.

HAH, Kake, stimmt!

Danke!

lg andy

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.