Datum: 04.07.2008 19:45
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
Datum: 04.07.2008 19:48
uint8_t buffer = 1; -> volatile uint8_t buffer = 1;
Datum: 04.07.2008 21:53
Danke! Funktioniert, und ich habe inzwischen auch rausgefunden, wozu das 'volatile' gut ist! dibujo
Datum: 04.07.2008 21:54
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:
: sei(); // Interrupts zulassen PORTB = 0x01; while (1) { } return 0; : |
Mit dem volatile sagt man dem Compiler, dass sich die Variable auch ausserhalb der Schleife ändern kann.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel