www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C18 Vergleichsoperator funktioniert nicht


Autor: Edi _2k (edi_2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

ich hab nen PIC18F4585 und programmier ihn mit C18 Compiler.

Es tritt bei mir ein seltsames Problem mit dem "<" Operator auf.

In der nicht-auskommentierten Version des untenstehenden Codes springt 
mein controller nicht in den körper der if-anweisung.
wohingegen es mit dem gleichheitsoperator funktioniert.

hat jemand eine idee?

#define RPM_LEVEL1 = 10000

void main (void)
{
     ...
     //unsigned int rpm = 10000;  // funktionierende Version
     unsigned int rpm = 9000;     // nicht-funktionierende Version
     setRPM(rpm);
     ...
}

void setRPM(unsigned int rpm)
{
  //if(rpm==RPM_LEVEL1)    // funktionierende Version
        if(rpm<RPM_LEVEL1)      // nicht-funktionierende Version
  {
    ...
  }
}

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define RPM_LEVEL1  (10000)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genaugenommen:
#define RPM_LEVEL1 = 10000

ist falsch, da gehört kein Gleichheitszeichen hin. Klammern, wie von 
Klaus vorgeschlagen, sind bei einem so primitiven Ausdruck nicht nötig.

Bedenke übrigens, daß solche Präprozessorkonstanten als int-Werte 
betrachtet werden; möchtest Du also einen Wert > 32767 deklarieren, so 
musst Du das Suffix U an die Konstante anhängen (um "unsigned int" zu 
spezifizieren).

Soll der Wert größer als 65535U werden, ist noch das Suffix L zu 
verwenden:
#define ZIEMLICH_VIEL 12345678UL

  

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bedenke übrigens, daß solche Präprozessorkonstanten als int-Werte
> betrachtet werden

Nein. Sie sind exakt wie ganz normalen Zahlen im Code. Lexikalische 
Ersetzung.

> Soll der Wert größer als 65535U werden, ist noch das Suffix L zu
> verwenden:

Unnötig. Soviel eigene Intelligenz darfst du dem Compiler durchaus 
zumuten. Erst bei den "long long" Varianten weist GCC vorsorglich darauf 
hin.

Autor: Edi _2k (edi_2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo.

das "=" im #define war nur ein tipfehler hier im forum.
die zahlen sind kleiner als 13000.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben. Und "ganz normale Zahlen im Code" ohne spezifische Suffixe sind 
ints.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und "ganz normale Zahlen im Code" ohne spezifische Suffixe sind ints.

Nein. Sie sind das, was für die korrekte Darstellung mindestens 
erforderlich ist, mindestens aber "int".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.