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
Danke! Funktioniert, und ich habe inzwischen auch rausgefunden, wozu das 'volatile' gut ist! dibujo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.