Hallo zusammen,
mal ne Frage: Ich hab hier folgendes Stück Code:
1 |
|
2 | if (Beginn < Ende) // kein Überlauf während der Messung
|
3 | {
|
4 | Calc = Ende - Beginn; // Rückgabewert der Messung berechnen
|
5 | }
|
6 | else // Timerüberlauf während der Messung
|
7 | {
|
8 | Calc = 0xFFFF - Beginn + Ende; // Rückgabewert der Messung berechnen
|
9 | }
|
alle 3 Varialen sind unsigned short int.
Der Sinn des ganzen: Ich messe mit einem Mega32 die Kapazität eines
Feuchtesensors mit einem Timer Capture Interrupt auf dem 16bit Timer1.
Eine Messung dauert zwischen 1/5 und 1/6 der Gesamtzählzeit bis zum
Überlauf, fängt aber irgendwo an und hört irgendwo auf. Mit dem Code
habe ich einen Timer-Überlauf während einer Messung abgefangen. Geht
wunderprächtig.
Jetzt hab ich mir gedacht, wäre es nicht viel einfacher, die ganze
If-Abfrage sein zu lassen und das ganze ausschließlich mit
zu machen? Falls dazwischen ein Timerüberlauf war, gibt es halt bei der
Subtraktion einen Überlauf (bzw. einen "Unterlauf" ;-) ), aber am Ende
steht dann ja doch wieder der Betrag der Differenz in der Variable -
oder?
Der einzige Unterschied zu vorher ist dann, wenn ich richtig liege, dass
dann halt der Overflow-Flag im Statusregister gesetzt ist, aber das
interessiert ja nicht weiter.
Lieg ich da falsch, ist das schlechter Stil, oder klappt das so? Würde
halt schön viel Code sparen, weil ich einige solche Stellen im Programm
hab... :-)