Forum: Compiler & IDEs ATmega644P Interrupt + While


von Howie A. (howie2)


Lesenswert?

Hallo liebe Community :)

Ich habe ein merkwürdiges Problem !
Ich habe eine void-Schleife in dieser werden 2 Variablen gesetzt.
Dann wird in einer Interrupt-ISR die ZAHL1 Heruntergezählt, ZAHL2 
gesetzt, wenn ZAHL1 == 0 ist...
IN der void-Schleife wird mittels eines "while(ZAHL2 != 0);" darauf 
gewartet, dass die ZAHL2 0 ist, DANN ERST soll die Schleufe enden und es 
im Main-Abschnitt  weitergehen (die Funktion "quittiert" werden)...

Code:
1
int Rem_Steps = 0;
2
int Finished = 1;
3
4
5
void Steps(int Steps)
6
{ 
7
8
  Rem_Steps = Steps;
9
  
10
  Finished = 0;
11
12
  while(Finished != 0);
13
14
}
15
16
ISR(INT0_vect)
17
{
18
  if (Finished == 0) 
19
  {
20
    if (Rem_Steps > 0) 
21
    {
22
      Rem_Steps--;
23
    }
24
    else
25
    {
26
      Finished = 1;
27
    }
28
  }
29
30
}
31
32
int main(void)
33
{ 
34
35
//INT0,1
36
EICRA = 0b00001111;
37
EIMSK = 0b00000011;
38
EIFR = 0b00000011;
39
40
sei();
41
42
Steps(100);
43
44
PORTD ^= BIT7; // Hier kommte er NICHT an !
45
46
while(1);
47
48
}

SO Das prob ist, dass entweder "Finished" nicht von der ISR wieder auf 1 
gesetzt wird, oder die while-Schleife, die darauf wartet nicht 
anspricht, warum auch immer...

An INT0 ist sozusagen ein prellfreier Taster, den ich denn ja 100x 
drücken müsste, bis PORTD-BIT7 einmal getoogelt wird...
Passiert aber nicht.

Hoffe echt ihr könnt mir helfen. kann das was mit meinem compiler zu tun 
haben oder so ?

Mfg Howie

von Falk B. (falk)


Lesenswert?

Siehe Interrupt, Stichwort volatile.

von Howie A. (howie2)


Lesenswert?

hust Das war echt zu einafch um wahr zu sein...
Du hast mir die Grübelarbeit von ca 2-3 Wochen in einem Satz 
beantwortet...
Kurz umgeschrieben, getestet, GEHT !!!
Ich muss echt mal 1000 Dank sagen, wenn ich dich mal im RL treffe 
bekommste einen Keks von mir !!!

Mfg Howie

von Falk B. (falk)


Lesenswert?

@Martin Steffen (howie2)

>Ich muss echt mal 1000 Dank sagen, wenn ich dich mal im RL treffe
>bekommste einen Keks von mir !!!

Bin ich das Krümelmonster? Ein Bier wär mir lieber . . . ;-)

von Oliver (Gast)


Lesenswert?

>hust Das war echt zu einafch um wahr zu sein...
>Du hast mir die Grübelarbeit von ca 2-3 Wochen in einem Satz
>beantwortet...

http://www.mikrocontroller.net/articles/AVR_Checkliste

Das Probelm mit dem fehlenden volatile gehört zu den 
Top-3-Einsteigerproblemen, und taucht hier mindestens einmal die Woche 
auf.

Oliver

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.