Warum meine Berechnung nach Timerüberlauf nicht mehr funktioniert, habe ich unn auch ermittelt.
while (TIMER1_TC - t_old < us) ; /* geht nicht */
/* Also "komplette" explizite Typwandlung auf allen Werten und Ergebnissen angewendet: */
while ((U16)((U16)(TIMER1_TC) - (U16)(t_old)) < us) ; /* siehe da, es funktioniert */
/* nun Typwandlungen gekürzt */
while ((U16)(TIMER1_TC - t_old) < us) ; /* auch OKAY */
Durch die Integer Promotion des Standard Typs int bei 32 Bit muss hier anscheinend das Ergebnis der Subtraktion
explizit wieder in einen unsigned 16 Bit gewandelt werden, sonst geht es schief, jedoch nur manchmal, je nach Timerstand.
Ich bin begeistert und kann nun das Wochenende geniessen...
Habt auch ein schönes, warmes WE.
Siro
Lesezeichen