Hallo,
ich habe mal wieder ein Problem. Ich verwende den Timer1 des Atmega8.
Dieser Funktioniert soweit auch so wie er soll. Es geschieht jede 1ms
ein Interrupt.
Nun habe ich folgendes gemacht :
Eine globale variable :
1 | volatile int timerCounter = 0;
|
Eine funktion die von main aufgerufen wird und die globale variable
setzt :
1 | void waitTime()
|
2 | {
|
3 | timerCounter = 1000;
|
4 | #ifdef DEBUG
|
5 | printf("WarteZeit = %i\n", timerCounter);
|
6 | #endif
|
7 | /*while(timerCounter > 0)
|
8 | {
|
9 |
|
10 | }*/
|
11 | #ifdef DEBUG
|
12 | printf("Ende = %i\n", timerCounter);
|
13 | #endif
|
14 | }
|
Und hier die Interrupt Funktion :
1 | //Timer1 Interupt Compare
|
2 | SIGNAL (SIG_OUTPUT_COMPARE1A)
|
3 | {
|
4 | if(timerCounter > 0)
|
5 | {
|
6 | timerCounter--;
|
7 | }
|
8 | }
|
Wenn ich die While Schleife auskommentiere (so wie jetzt im Code) geht
es ohne Probleme. Mache ich sie rein, bleibt er irgendwie da hängen (im
AVR Studio Debugger geht es, in Real aber nicht). Habe schon zig Debug
ausgaben gemacht um den Fehler zu finden :)
Beim Compiler sind jegliche Optimierungen ausgeschaltet, weil ich erst
dachte er optimiert mir z.B. die while Schleife weg, aber das war es
auch nicht.
Vielleicht hat ja einer von euch noch eine Idee...
Gruß
Micha