Hallo Pebisoft,
endlich mahl Jemand der etwas uber 'volatile' bescheid weiss.
Vorbild:
wenn flag wie 'unsigned char' definiert wird bleibt dass Program im 'while' Schleife hangen.Code:main(){ enable_timer0_overflow_interrupt; flag=1; while(flag){ } } timer0_overflow_interrupt_handler{ flag=0; }
wenn flag wie 'volatile unsigned char' definiert wird verlasst dass Program die 'while' Schleife sofort wenn ein timer0 interrupt geschied.
Hier die compilierten listings.
Jetzt an hand diene Aufmerkung verstehe Ich volatile (Ich hatte Gestern zufallig mein 'flag' Problem als Frage im AVR-C Forum deponiert.Code:Im Programlisting seht mann bei 'unsigned char' ldi r24,lo8(1) //lade 0x01 in register 24 sts flag,r24 //kopier register 24 in variabele 'flag' .L2 //label L2 tst r24 //test register 24 brne .L2 //so lange 'register 24' nicht null is gehe zuruck nach label .L2 Im Programlisting seht mann bei 'VOLATILE unsigned char' ldi r24,lo8(1) sts flag,r24 .L2 lds,r24,flag //hier wird immer aufsneu 'flag' in register 24 kopiert tst r24 brne .L2
Register r18, r19, r24 und r25 werden immer bei einem function-anruf auf dem Stack plaziert und nachher wieder zuruck geseztz.
Thanks!
Gruss
Henk







Zitieren

Lesezeichen