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.
Gelöst habe ich das jetzt so:Code:while (tmrFREQcounter) ;
Das funktioniert auch, aber vielleicht gibt es ja eine bessere Lösung. Globale Interrupts verbieten kommt nicht in betracht.Code:while (tmrFREQcounter) while (tmrFREQcounter);;
Ich bin jetzt erstmal auf ein char umgestiegen, da habe ich das Problem nicht.







Zitieren

Lesezeichen