C18 Vergleichsoperator funktioniert nicht

OP #582786
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
  {
    ...
  }
}
Persönliche Seite #582802
Lesenswert?
• ▲
▼
Genaugenommen:
1
#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:
1
#define ZIEMLICH_VIEL 12345678UL

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.