Hatte eben ein merkwürdiges Phänomen:
Ich habe einen 16 Bit-Counter, der in einem TMR0 Interrupt alle 0,68ms dekrementiert wird.
Ab und an wurde der Counter in der while-Schleife als 0 erkannt, obwohl er auf 0xFF stand.
Nach kurzer Überlegung bin ich drauf gekommen, dass es an daran liegen muss, dass der Counter 16-Bit lang ist und während der while Schleife ein TMR0-Int auftritt, der einen Unterlauf im Counter verursacht.
Code:
while (tmrFREQcounter) ;
Gelöst habe ich das jetzt so:
Code:
while (tmrFREQcounter) while (tmrFREQcounter);;
Das funktioniert auch, aber vielleicht gibt es ja eine bessere Lösung. Globale Interrupts verbieten kommt nicht in betracht.
Ich bin jetzt erstmal auf ein char umgestiegen, da habe ich das Problem nicht.
Lesezeichen