Setzen von Flag aus IRC klappt nicht

Gast #3416200
Lesenswert?
• ▲
▼
Hallo zusammen,
mal wieder was zum Thema Flags setzten aus der Routine des externen 
Interrupts. Es funktioniert einfach nicht!
- volatile ist dabei
- ISR wird ausgeführt
Trotzdem ändert die Variable "speed" ihren Wert nicht.

Wer weiß Rat?

Ich habe den Verdacht das die Compiler-Optimierung schuld ist. Aber wie 
unterbinde ich das?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
#define F_CPU 800000
5
#include <util/delay.h>
6

7
volatile unsigned char speed;
8

9
ISR(EXT_INT0_vect)
10
{
11
  PORTA |= (1<<PA1);  //zum Überprüfen ob ISR ausgeführt wird
12
  speed = 1;
13
  PORTA &= ~(1<<PA1);
14
  reti();
15
}
16

17

18
int main(void)
19
{
20
  DDRA = 0xff; 
21
  MCUCR |= ((1<<ISC01)|(1<<ISC00));  //The rising edge of INT0 generates an interrupt request.
22
  GIMSK |= (1<<INT0);          //Enable INT0 Interrupt
23
  sei();                //Enable Interrupts
24
  
25
  unsigned char i;
26
  
27
    while(1)
28
    {
29
    
30
    //Blink all day long ;)
31
    switch(speed)
32
    {
33
      case 0:
34
        PORTA |= (1<<PA0);
35
        _delay_ms(200);
36
        PORTA &= ~(1<<PA0);
37
        _delay_ms(200);
38
        break;
39
      case 1:
40
        for(i=0;i<10;i++)
41
        {
42
          PORTA |= (1<<PA0);
43
          _delay_ms(200);
44
          PORTA &= ~(1<<PA0);
45
          _delay_ms(200);
46
        }
47
        break;
48
      default:
49
        break;        
50
    }
51
    }
52
}

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.