Hallo,
ich habe eine kleine Funktion geschrieben, die einen Wert innerhalb
angegebener Grenzen inkrementieren bzw. dekrementieren soll.
(wenn Wert > max -> Wert = max-1; wenn Wert < 0 -> Wert = 0)
Sehen wir jetzt mal über die Art der Programmierung hinweg!
Mit dem auskommentierten Teil funktioniert die Funktion. Mit dem
unkommentierten nicht. Die Abfrage auf kleiner 0 ist hier das Problem.
Die optimiert der Compiler einfach weg.
Eigenlich wollte ich den Umweg über die temp Variable nicht machen und
einen cast benutzen, aber das funktioniert auch nicht. Ich habe Value
auch schon als signed char argument angegeben, aber das hat auch nicht
geklappt.
Geschrieben mit AVR-Studio mit WinAVR-Plugin für Atmega1281
Der Wert *tast kommt von einem Inkrementalgeber und kann nur die Werte
0, 1 und -1 annehmen.
1 | void fnFunction (char *tast, unsigned char *value, unsigned char max)
|
2 | {
|
3 | char temp = (char)*value;
|
4 |
|
5 | temp += *tast;
|
6 |
|
7 | if(temp < 0){ //damit gehts nicht
|
8 | temp = 0;
|
9 | }
|
10 | /*
|
11 | if(temp > 200){ //damit gehts
|
12 | temp = 0;
|
13 | }*/
|
14 | else if(temp >= max){
|
15 | temp = max-1;
|
16 | }
|
17 |
|
18 | *value = temp;
|
19 | *tast = 0;
|
20 | }
|
Woran kann das liegen?
Ich bin echt verzweifelt. Besonders wegen meines Unwissens.
Vielen Dank schon mal für eure Hilfe!
MfG Paul