Hallo,
wie müsste count den aussehen, um nicht <= 255 zu sein?
Gruß
Jens
Hallo und frohes Neues!
Warum führt Folgendes:
..immer zu dieser Warnung:Code:uint8_t count; for (count=0; count<=255; count++) {}
Muß ich in einer 8Bit MCU eine 16Bit Variable deklarieren, um den 8BitCode:lcd.c:84: warning: comparison is always true due to limited range of data type
Wertebereich nutzen zu können?
Funktioniern tuts ja wie ich möchte, nur wurmt mich diese Warnung doch ein bischen.
thx,
tholan
Hallo,
wie müsste count den aussehen, um nicht <= 255 zu sein?
Gruß
Jens
Das:
< 255
... gibt keine Warnung, aber dann zählts nur bis 254 => 0xfe.
Für mich ist die Frage, wie der Vergleichsoperator sein muß,
wenn ich den vollen Wertebereich ohne Compilerwarnung nutzen möchte.
Die Sache ist ganz einfach: Das Byte KANN nur <= 255 sein.
Dementsprechend wird das ganze immer Wahr sein.
Du willst ja den Übergang von 255 auf 0 erkennen, wenn ich mich nicht irre, hat der AVR ein entsprechendes Flag dafür.
Evtl. könntest du also prüfen, ob der Null-Flag in SREG gesetzt ist.
mfG
Markus
Das ich in einem Byte nur bis 255 zählen kann, ist mir schon klar,
warum aber die Warnung?
Ist das ein Bug im Compiler?
Die Warnung würde Sinn machen, wenn der Compiler erst addieren ließe und der Atmel
dann überprüft, ob die Bedingung noch wahr ist,
wobei er das nicht müßte, da ich ja sowieso will, daß er nur bis 255 zählt?????
Nein.... der Compiler hat recht mit seiner Warnung.
Wie markusj schon sagte, die einzige Möglichkeit dass der Ausdruck in der for-Schleife false wird, ist wenn count größer als 255 wird. Das ist aber nicht möglich da der Datentyp den du verwendest eben nur werte bis 255 speichern kann.
Dann darf ich das also als Warnung an den dummen Programmierer werten,
daß er auf seinen Wertebereich aufpassen soll, weil er so knapp an die Bereichsgrenze ranzählt?
Dann kann man die Warnung also links liegen lassen.
Du hast offensichtlich immer noch nicht realisiert, dass du da eine Endlosschleife programmiert hast.Zitat von tholan
Der Vergleich ist (wie der Compiler dir sagt) immer wahr, also wird die Schleife nie beendet.
MfG
Stefan
Falsch,
sie zählt brav von 0 bis 255 und beendet sich dann,
die Zahlen werden währenddessen in 3 dezimale Digits zerlegt und auf meinem LCDisplay zur Anzeige gebracht, wie es sein soll.
Ich habe nur eine unnötige Warnung.
Hallo,
kannst du den relevanten Code mal komplett posten. Die Schleife kann so wie oben dargestellt nicht beendet werden. Da muss es noch etwas anderes geben.
Gruß
Jens
Lesezeichen