- LiTime Speicher und Akkus         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: comparison is always true

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212

    comparison is always true

    Hallo und frohes Neues!
    Warum führt Folgendes:
    Code:
    uint8_t count;
    for (count=0; count<=255; count++) {}
    ..immer zu dieser Warnung:
    Code:
    lcd.c:84: warning: comparison is always true due to limited range of data type
    Muß ich in einer 8Bit MCU eine 16Bit Variable deklarieren, um den 8Bit
    Wertebereich nutzen zu können?
    Funktioniern tuts ja wie ich möchte, nur wurmt mich diese Warnung doch ein bischen.
    thx,
    tholan

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,


    wie müsste count den aussehen, um nicht <= 255 zu sein?

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212
    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.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    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

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212
    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?????

  6. #6
    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.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212
    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.

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von tholan
    Dann kann man die Warnung also links liegen lassen.
    Du hast offensichtlich immer noch nicht realisiert, dass du da eine Endlosschleife programmiert hast.
    Der Vergleich ist (wie der Compiler dir sagt) immer wahr, also wird die Schleife nie beendet.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212
    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.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    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

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus