Forum: Compiler & IDEs Einfacher C-Interrupt funktioniert nicht


von dibujo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, liebes Forum,
hier mein erster Beitrag zu einem Interrupt-Problem.
Meine Programmierumgebung: myAVR-2.0-USB-Board mit einem ATmega8, 
Programmierung mit Mac über Xcode. Alle bisherigen Programme 
funktionierten einwandfrei. Bei dem Programm handelt es sich um das 
Beispielprogramm aus dem myAVR-Tutorial, und ich habe keinen 
programmierfehler entdeckt.
Vielen Dank für eure Hilfe
dibujo

von Stefan E. (sternst)


Lesenswert?

uint8_t buffer = 1;
->
volatile uint8_t buffer = 1;

von dibujo (Gast)


Lesenswert?

Danke! Funktioniert, und ich habe inzwischen auch rausgefunden, wozu das 
'volatile' gut ist!
dibujo

von lkmiller (Gast)


Lesenswert?

Was wird am Port B ausgegeben?
Immer 0x01?

Dann wurde die Zuweisung
PORTB = buffer;
wegoptimiert.

Der Compiler sieht, die Variable buffer ist 1 und ändert sich in der 
while(1)-Schleife nicht. Daher macht er das daraus:
1
:
2
  sei();                                // Interrupts zulassen
3
  PORTB = 0x01;
4
  while (1) {  }
5
  return 0;
6
:

Mit dem volatile sagt man dem Compiler, dass sich die Variable auch 
ausserhalb der Schleife ändern kann.

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.